我面臨這個問題幾個月,我不知道什麼是最好的解決方案來解決它。問題是,我需要加載一個XIB之前,我的UITabBar顯示,更清楚地說,我有我的第一個視圖是用戶登錄(沒有標籤應該顯示),當用戶登錄時,應用程序驗證信息,之後應該用UITabBarController加載視圖,但每次我嘗試這樣做,而不是模態地呈現登錄視圖時,兩顯示視圖,登錄視圖和tabbar視圖。在UITabBarController之前顯示XIB?
回答
您可以先將loginViewController設置爲主要window
的rootViewController
,然後在用戶登錄後,將tabBarController設置爲rootViewController
。
像這樣的東西(假設你的loginViewController爲viewController1
):
Appdelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
UIViewController *viewController1 = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
UIViewController *viewController2 = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
UINavigationController *myNav1=[[UINavigationController alloc] initWithRootViewController:viewController1];
UINavigationController *myNav2=[[UINavigationController alloc] initWithRootViewController:viewController2];
self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:myNav1,myNav2, nil];
//set the login view
self.window.rootViewController = viewController1;
[self.window makeKeyAndVisible];
return YES;
}
-(void)setTabBar{
//self.viewController1=nil;
self.window.rootViewController = self.tabBarController;
}
然後從loginViewController調用方法的appDelegate的setTabBar
。
LoginViewController.m
#import "AppDelegate.h"
-(void)loginOK{
AppDelegate *del=(AppDelegate*)[[UIApplication sharedApplication] delegate];
[del setTabBar];
//you could add some animation transition between views
}
據我所知,UITabBarController
不能被嵌入到另一個viewController
。考慮到這一點,你有這些選擇:
呈現模式的看法(即不希望)
隱藏
tabBar
上推出,並且一旦證書進行驗證,顯示tabBar
。但有一個缺點:隱藏/顯示tabBar
不能動畫。可以啓動你的
UITabBarController
只有一個viewController
- 一來就是要問憑據,一經查實,添加更多viewControllers
到UITabBarController
(將添加更多標籤)。這也是您在某些應用中可以看到的一種行爲,例如Bank of America(http://itunes.apple.com/us/app/bank-america-mobile-banking/id284847138?mt=8)
有可能是更好的做法。這些是我的建議。
作爲一種簡單的方法,將您的視圖添加爲窗口的子視圖,並在您不再需要時將其解除。
例如,把這段代碼在你的appdelegate(假設loginController
是你的appdelegate的財產......還有其他的方法,這只是一個例子):
[self.window addSubview:self.loginController.view];
當你要解僱查看,刪除它:
[self.loginController.view removeFromSuperview];
不要忘了妥善發佈loginController
。
這樣,您的視圖只是簡單地「覆蓋」在您的標籤欄視圖上。這裏還有其他答案,只有在您登錄完成後纔有效地將tabbar視圖切換到您的視圖層次結構中,如果這是您想要的。
不是addSubView不推薦用於獨立的UIViewControllers,它應該是視圖? – Dejell 2013-02-06 14:59:59
- 1. Cocoa - 在另一個xib上顯示xib
- 2. 幫助顯示UITabBarController
- 3. XIB彈窗顯示
- 4. UITabBarController - 不顯示視圖
- 5. 用於UITabBarController之前登錄的UIViewController
- 6. 從XIB加載UITabBarController不包含任何來自XIB的內容
- 7. iPhone:ABPeoplePickerNavigationController將無法正確顯示在UITabBarController
- 8. 如何在SWIFT中顯示UITabBarController
- 9. 主XIB沒有顯示?
- 10. Container View未顯示nonstoryboard xib
- 11. XIB顯示副成分
- 12. 不顯示XIB文件
- 13. ListView - 在顯示之前檢查值
- 14. 在顯示ContextMenuStrip之前查找高度
- 15. 如何在Joptiopane之前顯示Jframe
- 16. 在InitializeComponent之前顯示子窗口
- 17. 在顯示div之前加載圖像
- 18. 在啓動UIImagePickerController之前顯示UIAlertView
- 19. li:之前未在IE8中顯示
- 20. 在初始化PhoneGap之前顯示ViewController
- 21. 在顯示之前修改模型
- 22. 在fancybox之前顯示確認框
- 23. 在啓動腳本之前顯示loads.gif
- 24. 在DOM準備好之前顯示spinner.gif
- 25. DOM在載入之前未顯示
- 26. 在插件之前顯示wordpress評論?
- 27. .xib文件沒有在MonoTouch中顯示
- 28. 如何在TableViewCell中顯示.xib文件
- 29. 關閉JFrame之前顯示提示
- 30. 在顯示您之前顯示視圖UITabBar
所以你不想顯示一個模態視圖來要求憑據?是對的嗎? – Canopus 2012-03-18 23:27:22
是的,我需要顯示登錄視圖,但沒有模態! – Mateus 2012-03-18 23:29:21