【问题标题】:Conditionally following a segue有条件地跟随一个segue
【发布时间】:2011-12-13 13:54:56
【问题描述】:

在我的应用程序中,我有一个登录屏幕。但是,当从登录按钮连接一个 segue 到下一个(表格)视图控制器时,无论您输入什么作为登录信息,您始终可以继续。如何查看登录信息,然后决定是否执行segue,那么如何有条件地执行segue?

是否可以在使用 segue 时实现这一点?我知道它可以通过编程来完成,但是我需要另一个导航控制器,因为我需要一个导航栏..

【问题讨论】:

    标签: objective-c ios cocoa-touch storyboard


    【解决方案1】:

    您可以将您的登录按钮或其他任何东西连接到一些 IBAction 代码,决定是否应该继续登录,然后(如果应该)您可以使用 performSegueWithIdentifier: 转换到新视图。

    我刚刚写了另一篇关于使用这种方法的帖子,here

    【讨论】:

    • 顺便说一下,你也可以让你的导航控制器没有导航栏。
    • 如果登录数据无效,这不会阻止您执行 segue..
    • 不,您需要在执行操作之前检查登录是否有效。如果它无效,则不要使用 performSegueWithIdentifier。如果您下载了示例 - 您会在代码中看到您可以在推送下一个视图之前执行检查。
    • 使用 performSegueWithIdentifier 意味着存在 segue。通过创建此 segue(将其从按钮拖到 IB 中的视图控制器),是否将 performSegueWithIdentifier 放在代码中都没有关系。一旦单击按钮,执行segue。您的代码与我的问题无关。我真的需要用一段代码之类的东西来保持 segue..
    • 您将 segue 从 View Controller 拖动到新视图,而不是从按钮拖动到新视图,因此可以连接多个按钮,而不会出现 Xcode 多次使用 Segue 的警告。尝试将您的 segue 从视图 1 中的状态栏连接到第二个视图,然后对其余部分进行编码。同样,我提供的示例显示了这种接线,没有连接到按钮。
    【解决方案2】:

    在 iOS 6 上,UIViewController 的 shouldPerformSegueWithIdentifier:sender: 方法解决了这个问题,无需手动触发 segues。

    【讨论】:

      【解决方案3】:
      1. 创建从“登录”到“仪表板”的手动转场
      2. 为 segue 标识符命名,例如“显示仪表板”
      3. 连接 IBAction 的“下一步”按钮
      4. 满足所有约束后,使用标识符手动调用 segue。

      - (IBAction)nextButtonPressed:(id)sender
      {
          if ([self hasAllRequiredFields]) {
              [self performSegueWithIdentifier:@"showDashboard" sender:self];
          } 
      }
      

      【讨论】:

        【解决方案4】:

        这是迟到的,但 imo 最好 setEnabled:NO 触发 segue 的任何内容,直到 segue 为“有效”。这将您的 segue 逻辑与您的视图逻辑分开......

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-02-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多