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

以编程方式更改故事板上的 UIView 的大小

故事板中的PresentModalViewController以编程方式iOS 5

对故事板和以编程方式推送 ios Objective C 感到困惑

iOS 更改故事板

来自故事板的自定义 UIButton