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

时间:2014-07-04 22:52:50

标签: ios objective-c

我有一个原始视图控制器,带有四个目标视图控制器。我希望能够使用导航控制器推送 segue到原始目标视图控制器的 ALL 。我试过......

- (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' 

我也尝试过......(将故事板segue设置为&#34; Push&#34;)

    - (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。

是否有人知道如何正确应用此功能并使其表现为我正在寻找的形式?

修改

重要的是要注意我正在检查条件是否符合&#34; messagesButtonPushed&#34;方法。我正在检查是否允许用户发送消息,如果是,则切换到VC。

1 个答案:

答案 0 :(得分:1)

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

在故事板中,确保原始视图控制器嵌入在导航控制器中(选择原始视图并选择编辑 - >嵌入 - >导航控制器)。

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

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

我建议您完成Storyboard Tutorial以了解故事板和分段的工作原理。

如果您确实想以编程方式执行segue,则可以控制从视图底部的黄色视图控制器图标拖动到目标。然后,您可以根据您的第二个代码使用performSegueWithIdentifier调用segue - 在您的情况下,您可以有两个不同的segue并触发商店segue或另一个根据购买状态