0

我有一个项目是“标签栏控制器”应用程序。第一个按钮本质上是一个主屏幕。第二个显示内容的 UITableView。第三个按钮显示不同的 UITableView 等。

从第一个视图(主页)来看,我在页面上有一个按钮,它在功能上等同于选项卡控制器的第二个按钮。这是访问该 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”而终止应用程序,原因:“应用程序试图以模态方式呈现活动控制器。” *首先抛出调用栈:

4

1 回答 1

1

问题是您称为 的第二个视图控制器的这个实例secondViewController已经在界面中,作为选项卡视图控制器的子级。你不能让它在那里,不能呈现或推动它。

在代码中操作标签栏控制器的方法是设置is selectedViewController(或选择的索引)。尝试这样做。

于 2013-05-16T17:11:21.427 回答