我在应用程序中有一个屏幕(登录),可以从任何其他屏幕中显示我想将启动该屏幕的逻辑放在我的ViewControllers外面,因此不会重复
这是可能的吗?
我收到的NSNotificationCenter通知消息也可以加载此屏幕
所以,我将其放入控制器中,每个视图控制器都调用此控制器执行登录。当请求登录时,将请求的视图控制器(或其父级(如果不是全屏))作为参数。
现在,当需要显示登录视图时,您有一种从"登录控制器"内部显示的通用方法。请求视图控制器对"登录控制器"一无所知,而"登录控制器"对请求视图控制器一无所知。
当通过通知触发时,应用程序委托可以从应用程序窗口获取root View Controller,并将其作为请求视图控制器传递。
您只需为您的登录屏幕创建一个ViewController,并在"身份检查器"下给它一个"故事板ID"。当您想显示时,您可以这样实例化:
loginViewController = [[self storyboard] instantiateViewControllerWithIdentifier:@"storyboardID"];
之后,如果您使用的是NavigationController,则可以将其推开,也可以将其添加为子视图。
edit :我如何知道是否存在:
NSArray *controllers = self.navigationController.viewControllers;
for (UIViewController* controller in controllers)
{
if ([controllers isKindOfClass:[LoginController class]])
{
NSLog(@"is already present");
}
}