以编程方式推送Segue到多个视图控制器



我有一个原始视图控制器和四个目标视图控制器。我想要能够推送 segue与导航控制器从原始的所有目标视图控制器。

- (IBAction)notificationsButtonPushed:(id)sender {
    NotificationsViewController *notifications = [[NotificationsViewController alloc]init];
    [self.navigationController pushViewController:notifications animated:YES];
}
- (IBAction)messagesButtonPushed:(id)sender {
    MessagesViewController *messages = [[MessagesViewController alloc] init];
    [self.navigationController pushViewController:messages animated:YES];
}
- (IBAction)settingsButtonPushed:(id)sender {
      if (canMessage) {
          SettingsViewController *settings = [[SettingsViewController alloc]init];
          [self.navigationController pushViewController:settings animated:YES];
      }
      else {
          NSLog(@"Can't Message");
      }
}
- (IBAction)previewButtonPushed:(id)sender {
    PreviewViewController *preview = [[PreviewViewController alloc]init];
    [self.navigationController pushViewController:preview animated:YES];
}

这只是给我一个空的视图控制器没有我的UI组件。

注意:我也累了"initWithNidName:"并在每个目标视图控制器的storyboardID中传递,它给了我错误:

'Could not load NIB in bundle: 'NSBundle </var/mobile/Applications/B7E025E5-D7D2-4FFD-B49C-E10DF5E94C44/LifePoints.app> (loaded)' with name 'preview' 

我也试过……(将storyboard segue设置为"Push")

    - (IBAction)notificationsButtonPushed:(id)sender {
    [self performSegueWithIdentifier:@"notifications" sender:self];
}
- (IBAction)messagesButtonPushed:(id)sender {
    if (canMessage) {
        [self performSegueWithIdentifier:@"messages" sender:self];
    }
    else {
        NSLog(@"Can't Message");
    }
}
- (IBAction)settingsButtonPushed:(id)sender {
    [self performSegueWithIdentifier:@"settings" sender:self];
}
- (IBAction)previewButtonPushed:(id)sender {
    [self performSegueWithIdentifier:@"preview" sender:self];
}

虽然这会用适当的segue类型将目标视图控制器推到屏幕上,但它会而不是 segue到正确的目标视图控制器。它似乎只segue到最后一个附加的storyboard segue。

有没有人知道如何正确地应用这一点,并有它的行为在我正在寻找的形式?

编辑

重要的是要注意,我正在检查是否满足"messagesbuttonpressed"方法的条件。我正在检查是否允许用户发送消息,如果允许,那么segue到VC。

您不需要任何代码来实现基本的segue。

在你的故事板中,确保你的原始视图控制器嵌入在导航控制器中(选择原始视图并选择Edit->Embed In -> navigation controller)。

然后你可以简单地从你的四个按钮中的每一个control拖动到相应的目标视图,选择"push"作为segue类型。然后,您可以单击两个视图之间的segue图标,为每个segue提供标识符。

您可以删除您的IBAction方法和链接到它们的按钮上的任何操作。

我建议你完成一个故事板教程来学习故事板和segue是如何工作的。

如果你想以编程方式执行segue,那么你可以从视图底部的黄色视图控制器图标control拖动到目的地。然后你可以用performSegueWithIdentifier调用segue,就像你的第二个代码一样——在你的例子中,你可以有两个不同的segue,并触发商店segue或另一个取决于购买状态

最新更新