【问题标题】:iOS: Programmatically Push Segue to Multiple View ControllersiOS:以编程方式将 Segue 推送到多个视图控制器
【发布时间】:2014-07-04 22:52:49
【问题描述】:

我有 一个 原始视图控制器和 四个 目标视图控制器。我希望能够 push 使用导航控制器将原始视图控制器 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' 

我也尝试过...(故事板 segues 设置为“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];

}

虽然这确实将目标视图控制器以适当的转场类型推送到屏幕上,但它确实转场到正确的目标视图控制器。它似乎只转至最后附加的故事板转场。

有谁知道如何正确应用它并让它以我正在寻找的形式表现?

编辑

请务必注意,我正在检查“messagesButtonPushed”方法是否满足条件。我正在检查是否允许用户发送消息,如果允许,则转到 VC。

【问题讨论】:

    标签: ios objective-c


    【解决方案1】:

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

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

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

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

    我建议您填写Storyboard Tutorial 以了解故事板和转场的工作原理。

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

    【讨论】:

    • 感谢您的回复,保罗。我想这是我的错,因为我没有澄清重要的一点。我的一个按钮我只想如果满足某个条件。所以我打算运行一个“if 语句”来检查条件是否为真,then 继续到目标视图控制器。你知道我该怎么做吗?
    • 您可以实现方法 shouldPerformSegue:ForIdentifier:您返回一个布尔值,指示是否应继续进行 segue。就个人而言,我更喜欢设置按钮的启用状态,以向用户提供他们无法按下按钮的反馈,而不是让他们按下位并想知道为什么什么也没发生
    • 或者方法可能只是 shouldPerformSegue - 我现在在手机上
    • Button 基本上有两种方式。首先,如果用户购买了应用内购买,该按钮将转到允许他们发送消息的屏幕,如果他们还没有购买,我想提示他们购买。在这种情况下这仍然有效吗?非常感谢您抽出宝贵时间,我知道在手机上打字是什么感觉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 2014-12-19
    • 2012-07-22
    相关资源
    最近更新 更多