prepareForSegue 不会初始化新视图

Posted

技术标签:

【中文标题】prepareForSegue 不会初始化新视图【英文标题】:prepareForSegue doesn't init new view 【发布时间】:2012-05-13 20:28:25 【问题描述】:

我一直在查看几个教程,如果他们将任何信息传递给下一个视图,它们都只用一行代码或更多代码调用新视图。目前我想用这样的 segue 构建一个菜单:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender           
    NSIndexPath *path = [self.tableView indexPathForSelectedRow]; 
    if ([path row]==0) 
        MainViewController *mtvc = (MainViewController *)[segue destinationViewController];
     else 
        SettingsViewController *svc = [segue destinationViewController];
           

通常所有示例都使用“segue.identifier isEqualToString:@”“”。但是我无法将情节提要内的表格视图的单元格与多个其他视图连接起来。因此,我使用选定的行来确定我的哪些观点应该继续。

我不知道这是否会出现问题,但我以这种方式从我的 splashview 初始化了 tableview:

-(void)turnNext 
    UIStoryboard *storyboard = self.storyboard;
    MenuTableViewController *mtvc = [storyboard instantiateViewControllerWithIdentifier:@"Menu"];
    [self presentViewController: mtvc animated:YES completion:nil];

【问题讨论】:

你不使用 UINavigationController 吗? 我选择了表格视图并嵌入了导航控制器。从菜单转到其他视图时还有其他方法吗? 你为什么使用segues而不是pushViewController?我只是好奇:) 我第二次开始学习为 iphone 编写 ios 应用程序,并在 lynda 的教程中看到了不同的方法。所以这次我想用故事板创建我的项目来学习这个功能。 【参考方案1】:
-(void)turnNext 
    UIStoryboard *storyboard = self.storyboard;
    MenuTableViewController *mtvc = [storyboard instantiateViewControllerWithIdentifier:@"Menu"];

    [self presentViewController: mtvc animated:YES completion:nil];

             ^^^^^^

改成

[self.navigationController pushViewController:mtvc animated:YES];

【讨论】:

这会改变我之后步骤的问题吗?因为切换到表格视图只适用于我的代码...我可以始终以编程方式切换视图,但我总是读到,在项目中使用情节提要时,您不应该经常使用这种方式【参考方案2】:

你应该为此使用segues。

在情节提要中的源控制器上创建 2 个自定义转场。 将它们的标识符设置为“segueToMainViewController”和“segueToSettingsViewController”

现在,在 tableView - 'didselectrowAtIndexPath' 方法使用以下。

//use your logic here

if(indexPath.row == 1) 
   [self performSegueWithIdentifier:@"segueToMainViewController" sender:nil];

else 
   [self performSegueWithIdentifier:@"segueToSettingsViewController" sender:nil]

如果您需要向控制器发送任何内容,您可以将数据作为发送方传递。

【讨论】:

以上是关于prepareForSegue 不会初始化新视图的主要内容,如果未能解决你的问题,请参考以下文章

通过 prepareForSegue 传递 NSString - Swift

如何使用 prepareForSegue 方法从视图控制器推送到导航视图控制器?

prepareForSegue 调用了两次

将选项卡栏控制器嵌入导航控制器时的 prepareForSegue

prepareForSegue 调用时不发送参数,导致崩溃

从最初的 View Controller 如何将 acriss 转移到 UITabBarController 并使用 prepareForSegue