我有两个故事板的应用程序。一个用于登录,另一个用于应用程序的其余部分。第二个是在用户登录时(通过NSNotification
观察者)加载,使用[storyboard instantiateInitialViewController]
获取第一个控制器,即UITabBarController
,我将其设置为{{1} (在应用程序委托中所有这些)。
问题仅在用户首次登录时发生。标签栏不显示背景(除非我设置了一个,但它显示为纯色而不是有色默认样式),并且它不显示标签栏图标,除了所选的那个。几秒钟后,它会刷新并显示所有图标和有色背景。
应用程序中没有其他代码修改标签栏,除了自己的控制器,它在收到通知时更新标记。自动刷新所需的时间各不相同,有时大约需要2秒,有时则不会更新,除非您选择(五个)选项卡中的每一个。要重现这一点,我需要每次都卸载应用程序,因为在第一次使用后,标签栏的行为正常。图标在故事板文件中设置,不会以编程方式在任何地方更新。
这是第一次显示标签栏的屏幕截图: http://i.stack.imgur.com/gqT5X.png
这就是它在一段时间后的样子(并且应该): http://i.stack.imgur.com/9y8ch.png
编辑:添加了一些加载代码
这是加载两个故事板的代码:
rootViewController
使用以下代码在- (void)showInterface {
UIStoryboard *storyboard;
UIViewController *viewController;
if ([[self.configuration userManager] userIsLoggedIn]) {
storyboard = [UIStoryboard storyboardWithName:MAIN_STORYBOARD_NAME bundle:nil];
CWNTabBarController *tabController = [storyboard instantiateInitialViewController];
tabController.configuration = self.configuration;
self.configuration.notificationDisplay = tabController;
viewController = tabController;
}
else {
storyboard = [UIStoryboard storyboardWithName:WELCOME_STORYBOARD_NAME bundle:nil];
CWNWelcomeController *welcomeController = [storyboard instantiateInitialViewController];
welcomeController.configuration = self.configuration;
viewController = welcomeController;
}
[self.window performSelectorOnMainThread:@selector(setRootViewController:) withObject:viewController waitUntilDone:YES];
}
中调用上面的代码:
(BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions
答案 0 :(得分:0)
我遇到了这个问题,我的问题是我需要在主线程中启动另一个视图控制器:
if response.statusCode == 200 {
dispatch_async(dispatch_get_main_queue(), {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateInitialViewController() as! SpoktTabBarController
self.presentViewController(vc, animated: true, completion: nil)
})
}