0

你好stackoverflowers

我有一个设计问题。

我有一个 MainMenuViewController 类。它有一个在应用程序右侧显示菜单的方法。这个方法是从应用程序的不同部分调用的,实际上,在每个导航控制器中,我必须将该方法设置为导航栏右键的目标。

这导致我在每个推送的视图控制器中都有这样的代码:

UIViewController *root = [self.navigationController.viewControllers objectAtIndex:0];
[self.topBarMenuButton addTarget:((RecordsViewController*)root).mainMenuController action:@selector(launchMenu:) forControlEvents: UIControlEventTouchUpInside];

而且我必须给每个根控制器一个对主菜单的引用。

我一点也不喜欢。我想要的是这样的:

[self.topBarMenuButton addTarget:[MainMenuController sharedInstance] action:@selector(launchMenu:) forControlEvents: UIControlEventTouchUpInside];

因此,应用程序的每个视图控制器都可以访问主菜单,而无需从其根视图控制器或应用程序委托中获取它。

这是一个好主意吗?对我来说这听起来不错,但我不确定使用共享视图控制器实例是否有任何缺点。

感谢和快乐的编码

4

1 回答 1

0

最好使用单例来满足您的要求。

在 MainMenuViewController.m 文件中

static MainMenuViewController *_sharedMySingleton;

+(MainMenuViewController *) sharedInstance
{
    @synchronized([MainMenuViewController class])
    {
        if (!_sharedMySingleton)
        {
            _sharedMySingleton = [[self alloc] init];

        }
        return _sharedMySingleton;
    }
    return nil;
}

无论您想在哪里访问此对象,只需像这样调用...

[self.topBarMenuButton addTarget:[MainMenuController sharedInstance] action:@selector(launchMenu:) forControlEvents: UIControlEventTouchUpInside];
于 2013-03-06T12:30:55.700 回答