我有一个项目是“标签栏控制器”应用程序。第一个按钮基本上是主屏幕。第二个显示内容的UITableView。第三个按钮显示不同的UITableView等。
从第一个视图(Home),我在页面上有一个按钮,功能上与标签控制器的第二个按钮相同。它是到达UITableView的另一种途径。我不想按下按钮到AppDelegate的UITabBarController。
我想要的HomeViewController中的代码基本上是这样的:
-(IBAction) touchInsideButton:(id)sender {
[self presentModalViewController: [appDelegate secondViewController] animated:YES];
}
或
-(IBAction) touchInsideButton:(id)sender {
AppDelegate *appDelegate = (AppDelegate*) [[UIApplication sharedApplication] delegate];
[appDelegate launchSecondViewController: self];
}
其中,“launchSecondViewController”是(取消注释两行中的一行)
-(void) launchSecondViewController: (id) sender {
// [self.tabBarController presentModalViewController: secondViewController animated:YES];
// [self.tabBarController.navigationController pushViewController: secondViewController animated:YES];
}
无论如何,这三种方法都会产生同样的错误:
2013-05-16 12:04:26.977 MyApp [55273:f803] *由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'应用程序尝试以模态方式呈现活动控制器。 * 首先抛出调用堆栈:
答案 0 :(得分:1)
问题是第二个视图控制器的这个实例(您称为secondViewController
)已作为选项卡视图控制器的子项存在于接口中。你不能在那里,也出现或推动它。
manipulate a tab bar controller in code的方式是设置为selectedViewController
(或选定的索引)。试着这样做。