如何从另一个 UIViewController 触发 UITabBarController 的一个 UIViewController?

Posted

技术标签:

【中文标题】如何从另一个 UIViewController 触发 UITabBarController 的一个 UIViewController?【英文标题】:How can I trigger one UIViewController of the UITabBarController from another UIViewController? 【发布时间】:2013-05-16 17:09:11 【问题描述】:

我有一个项目是“标签栏控制器”应用程序。第一个按钮本质上是一个主屏幕。第二个显示内容的 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”而终止应用程序,原因:“应用程序试图以模态方式呈现活动控制器。” * 首先抛出调用栈:

【问题讨论】:

【参考方案1】:

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

manipulate a tab bar controller in code 的方式是设置为selectedViewController(或选择的索引)。请尝试这样做。

【讨论】:

这太容易了!我过度思考这个问题,这应该是显而易见的。我确实开始尝试将我的“触摸”事件转发到那个按钮——再一次,KISS 更好。 这可能只是冷静下来,深呼吸,阅读文档的问题! 请接受我诚挚的歉意。我认为它在没有其他答案的情况下提供了封闭性和完整性。我过去曾使用过您的回答,并尊重您的声誉、专业知识和帮助。 无需道歉!这是 Stack Overflow 上的一个真正问题 - 如何显示结果。您可以编辑自己的问题,明确说明这是一个编辑;您可以提交自己的答案;也许最好的办法是在我的回答之后添加评论,但不幸的是,很难在评论中展示代码。 另见meta.stackexchange.com/questions/74101/…关于这个主题。我认为会有这样的建议,继续并发布您自己对自己问题的回答。如果它给了你需要的线索,你可以在接受我的回答的同时这样做,谁知道呢,将来有人可能会支持你的答案!

以上是关于如何从另一个 UIViewController 触发 UITabBarController 的一个 UIViewController?的主要内容,如果未能解决你的问题,请参考以下文章

如何从另一个 UIViewController 重新加载 UITableViewController

如何从另一个 UIViewController 更改分段控件标题(设置)

如何从另一个/第二个 UIViewController 隐藏 UILabel?

从另一个 UIViewController 中呈现一个 UIViewController?

从另一个 UIViewController 呈现 UIViewController

有没有办法查看当前 UIViewController 是不是从另一个 UIViewController 的解雇中出现