我这样做,想要从登录页面打开标签栏控制器,如果它已经第一次登录,然后通过登录页面并在Spalsh后打开标签栏控制器
意味着如果用户在应用程序第一时间登陆,则应该是这样的 飞溅 2.登录页面 3.成功登录后,打开带有4个选项卡的标签栏控制器
如果用户已经登录 飞溅 2.标签栏控制器
我试图通过ViewDidLoad方法中的以下代码打开Tab Bar控制器
UITabBarController *tbc = [self.storyboard instantiateViewControllerWithIdentifier:@"TripMapViewer"];
tbc.selectedIndex=0;
[self presentViewController:tbc animated:YES completion:nil];
但是它给出了错误
2014-02-06 19:55:43.849 ProjNew [1065:907] - [TripMapViewer setSelectedIndex:]:无法识别的选择器发送到实例0x1d5600b0
如果我删除 tbc.selectedIndex = 0; 它什么都不做,就像这样停留在Splash屏幕上
UITabBarController *lbc = [self.storyboard instantiateViewControllerWithIdentifier:@"TripMapViewer"];
[self presentViewController:lbc animated:YES completion:nil];
请建议我如何从View Controller打开标签栏
答案 0 :(得分:19)
似乎 TripMapViewer 是某个标签的Storyboard ID
,而不是UITabBarController
,请确保它可以正常工作
如下面的代码 MainTabBar 是Storyboard ID
的{{1}}而且效果很好
UITabBarController
答案 1 :(得分:1)
除非您正在制作动画,否则您不需要启动画面控制器。此示例使用NSUserDefaults记住它是否首次登录。
在您的应用程序委托中添加以下内容:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
if(![[NSUserDefaults standardUserDefaults] dictionaryForKey:@"someKey"]){
UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"registerViewController"];
self.window.rootViewController = viewController;
} else {
UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"mainViewController"];
self.window.rootViewController = viewController;
}
[self.window makeKeyAndVisible];
return YES;
}
如果您决定必须为启动画面设置一个viewcontroller,那么您可以在那里添加相同的代码。
答案 2 :(得分:1)
实例化的VC不是TabBarController的事实解释了崩溃。该代码向故事板询问常规vc,将其转换为UITabBarController
,然后向其发送消息setSelectedIndex
:它没有实现,因为它不是标签栏控制器。
至少获取目标的第一步是将故事板中的标识添加到标签栏控制器(TripMapViewer是其中一个标签)。然后实例化,崩溃应该消失。
在设计层面,请see my question and answer here了解如何登录和启动。