TabViewController中prepareForSegue方法没有被调用

4
我有一个UITabViewController,负责管理多个视图(和导航控制器)。这些视图是通过在Storyboard中Ctrl单击UITabViewController并选择“关系segue”连接到其他视图的。
问题是,在UITabViewController中prepareForSegue根本没有触发。代码中没有做任何其他更改。点击选项卡栏切换视图时,NSLog不会输出任何内容。
CustomTabViewController.m
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.

    NSLog(@"Here..");
    NSLog(@"%@", [segue destinationViewController]);
}

有人知道为什么会发生这种情况吗?谢谢

3个回答

14

假设你想要使用 UITabBarController 而不是 UITabViewController 并且点击 UITabBarItem 切换视图时,将不会触发 prepareForSegue:sender:。但是,它将导致您的 UITabBarControllerDelegate 中的 tabBarController:didSelectViewController: 被触发,因此您可以使用该方法来执行您所希望在 prepareForSegue:sender: 中执行的任何操作。如果您想要引用导航到的视图控制器,而不是使用 [segue destinationViewController],则可以直接引用 viewController 参数。


这个答案提供了有用的内容:在设置 UITabBarControllerDelegate 后,我能够实现 tabBarController:didSelectViewController: 并在那里进行初始化。 - kfmfe04

2

选项卡控制器(UITabBarController对象)不会将其选项卡中包含的视图控制器连接起来。

据我所知,没有UITabViewController这样的东西。在发布问题时使用正确的类名是很重要的。起初我误读了你的问题,并认为它说的是“UITableViewController”。(似乎@MatteoGobbi也是如此)


是的,事实上,在我在评论中更正我的答案后,您在这里写下了相同的内容。 - Matteo Gobbi
我确实理解为什么你会认为选项卡栏中的选项卡链接是转场。它们看起来像转场,当你将子视图控制器嵌入父视图控制器时,使用“嵌入”转场将其链接,但“关系”链接不是转场,并且不会导致prepareForSegue方法被调用。 - Duncan C

0
如果您希望用户在单击单元格时打开一个新的viewController,则必须连接到Storyboard中的UITableViewCell而不是UITableViewController
在您目前的情况下,您应该从didSelectRowAtIndexPath方法手动启动performSegue,因为您可能连接到Storyboard中的UITableViewController
编辑:
我现在读到您的意思是UITabViewController,所以我在下面发表评论:
在这种情况下没有连线.. UITabViewController被初始化为一组控制器..所以当您单击选项卡时,不会调用任何连线。

1
没有涉及到表格。故事板将一个TAB视图控制器连接到一个导航视图,然后连接到一个常规视图。我希望在单击不同的选项卡时触发prepareForSegue。 - user3621606
1
当您点击不同的选项卡时,如果有,则没有segue.. tabviewcontroller会初始化一组控制器..因此,当您单击选项卡时,不会调用任何segue。 - Matteo Gobbi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接