Hello stackoverflowers
我有个问题。
我有一个MainMenuViewController类。它有一个方法,在应用程序的右侧显示一个菜单。从app的不同部分调用此方法,实际上,在每个导航控制器中,我必须将该方法设置为导航栏右键的目标。
这导致我在每个推送的视图控制器中都有这样的代码:
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];
因此,应用程序的每个视图控制器都可以访问主菜单,而无需从其根视图控制器或应用程序委托中获取它。
这是个好主意吗?这对我来说听起来不错,但我不确定使用共享视图控制器实例是否有任何不利之处。
感谢和快乐的编码
答案 0 :(得分: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];