iOS:以编程方式更改选项卡 - 故事板
Posted
技术标签:
【中文标题】iOS:以编程方式更改选项卡 - 故事板【英文标题】:iOS: Tab change programmatically - storyboard 【发布时间】:2016-04-07 11:13:35 【问题描述】:我正在尝试在情节提要中以编程方式更改选项卡,但出现错误
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
TabViewController *tabBarCon = [storyboard
instantiateViewControllerWithIdentifier:@"tabBar"];
tabBarCon.selectedViewController = [tabBarCon.viewControllers objectAtIndex:1];
错误
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil”
这里tabBarCon.viewControllers
不为空。
NSLog(@"%@",tabBarCon.viewControllers);
给予
(
"<FirstViewController: 0x16642020>",
"<SecondViewController: 0x173c4c00>",
"<ThirdViewController: 0x166db570>",
"<ForthViewController: 0x166d17c0>",
"<FifthViewController: 0x166066a0>"
)
【问题讨论】:
日志显示将 nil 对象插入数组时发生崩溃。尝试添加异常断点来检测导致崩溃的确切行。 线tabBarCon.selectedViewController = [tabBarCon.viewControllers objectAtIndex:1];
正在崩溃
就说tabBarCon.selectedIndex=1;
【参考方案1】:
你需要有 tabbarcontroller 的实例。
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
TabViewController *tabBarCon = [storyboard instantiateViewControllerWithIdentifier:@"tabBar"];
此语句从情节提要创建新的标签栏实例。
[self.tabBarController setSelectedIndex:1];
如果您在标签栏控制器中,那么您将使用self.tabBarController
轻松获取实例
【讨论】:
【参考方案2】:试试这个:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
TabViewController *tabBarCon = [storyboard instantiateViewControllerWithIdentifier:@"tabBar"];
[self.tabBarController setSelectedIndex:1];
【讨论】:
你有没有尝试在推送或呈现tabbarcontoller后设置selectedIndex ......【参考方案3】:试试这个
UITabBarController *controller =(UITabBarController *)
self.window.rootViewController;
[controller setSelectedIndex:1];
我已经在 Appdelegate 上试过它正在工作
【讨论】:
我已将该代码放在 Appdelegate 上,所以 self.window.rootViewController 对此感到抱歉 第二行不完整 意思是 [控制器 setSelectedIndex:1] ? @萨利姆 您还可以将 [self setSelectedIndex:1] 设置为您的 UITabbarController 的子类也可以使用以上是关于iOS:以编程方式更改选项卡 - 故事板的主要内容,如果未能解决你的问题,请参考以下文章
故事板中的子类 viewController 并以编程方式从子类更改 UI
故事板中的PresentModalViewController以编程方式iOS 5