我有一个具有主视图控制器(登录控制器)的应用程序。如果授权完成,我将向用户显示另一个控制器(tabBarController)。我是这样做的:
AppDelegate:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
LogInViewController *logInController = [[[LogInViewController alloc] init] autorelease];
_tabBarController = [[UITabBarController alloc] init] ;
SearchViewController *searchController = [[[SearchViewController alloc] init] autorelease];
CabinetViewController *cabinetController = [[[CabinetViewController alloc] init] autorelease];
HelpViewController *helpController = [[[HelpViewController alloc] init] autorelease];
CatalogViewController *catalogController = [[[CatalogViewController alloc] init] autorelease];
NSArray *controllerArray = [NSArray arrayWithObjects:cabinetController, catalogController, searchController, helpController, nil];
[_tabBarController setViewControllers:controllerArray];
//[navController setViewControllers:controllerArray];
[self.window setRootViewController:logInController];
[self.window makeKeyAndVisible];
return YES;
}
然后在按钮事件上我做了这个:
-(void)logInUser:(id)sender
{
AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[delegate.window setRootViewController:delegate.tabBarController];
[delegate.tabBarController setSelectedIndex:0];
[self.view removeFromSuperview];
}
如何以更有效的方式做这种事情???提前谢谢大家。
答案 0 :(得分:3)
既然你问的是哪种效率方式最多,那很容易。使用故事板。
这确实是故事板旨在解决的问题。您可以创建所有视图控制器,设置许多所需的属性 - 包括您希望外部导航控制器隐藏其导航栏的事实 - 在故事板本身中,您将获得实时编辑器你可以反弹想法。最好的部分?您可以使用 zero 代码行中的Storyboard完成问题中描述的所有操作。这就是编写和维护的零行代码。真实的故事。我会证明的!
我在下面的故事板中模仿了你在问题中描述的内容:
这导致模拟器中的以下应用程序:
最好的部分,这是此应用程序中整个代码的屏幕截图:
我认为它没有比这更有效率。如果您是故事板的新手,我强烈建议您阅读Ray Wenderlich Beginning Storyboards in iOS 5的精彩初学者指南。
答案 1 :(得分:0)
- (IBAction)HelpClicked:(id)sender
{
_tabBarController = [[UITabBarController alloc]initWithNibName:@"UITabBarController" bundle:nil]; ;
[self.navigationController pushViewController:_tabBarController animated:YES];
}
尝试这个...