2014-04-10 21 views
1

我有一個應用程序與兩個故事板。一個用於登錄,另一個用於其他應用程序。第二個在用戶登錄時(通過NSNotification觀察員)使用[storyboard instantiateInitialViewController]獲取第一個控制器(UITabBarController),並將其設置爲rootViewController(所有這些都在應用程序委託中)時加載。UITabBarController圖標和色調不顯示一段時間

該問題只發生在用戶第一次登錄時。標籤欄不顯示背景(除非我設置了背景,但它顯示爲純色而不是有色的默認樣式),並且不會顯示選項卡欄圖標,除了所選的那個。幾秒鐘後,刷新並顯示所有圖標和有色背景。

應用程序中沒有其他代碼修改標籤欄,除了自己的控制器在收到通知時更新徽章。自動刷新所花費的時間各不相同,有時大約需要2秒,而其他時間則不會更新,除非您選擇每個(五個)選項卡。爲了重現這一點,我需要每次卸載應用程序,因爲第一次使用後,標籤​​欄的行爲正常。圖標在故事板文件中設置,不會以編程方式更新。

這裏的標籤欄的截圖,因爲它顯示了第一次: http://i.stack.imgur.com/gqT5X.png

,這是它的外觀(也應該)一段時間後: http://i.stack.imgur.com/9y8ch.png

編輯:添加一些加載代碼

這是一個既加載故事板代碼:

- (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

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
[self showInterface]; 
[self.window makeKeyAndVisible]; 
+0

也許你可以試試以後使用一個storyboard並修改tabbar的viewcontrollers。NSMutableArray * vcs = [NSMutableArray arrayWithArray:[self.tabBarController viewControllers]]; \t [vcs removeObjectAtIndex:2]; \t [self.tabBarController setViewControllers:vcs]; – sissichen

+0

顯示一些代碼。這種問題聽起來像是一個可能的線程問題... – matt

+0

感謝您的興趣!我剛更新了這個問題。 – alonsovb

回答

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) 
    }) 
} 
相關問題