【问题标题】:ios: different segue to another view depending on the segue used in the previous viewios:根据前一个视图中使用的segue,与另一个视图不同的segue
【发布时间】:2015-08-03 12:32:34
【问题描述】:

抱歉,如果这有点不清楚 - 我是 iOS 编程的菜鸟。这是场景:

我有一个 LogInView、一个 CategoryView、一个 CheckerView、一个 WalkthroughView 和一个 LandingPageView。

用户从 LogInView 开始,根据应用的蓝牙状态,以及用户是否已注册,进入:

  • CheckerView(已注册,蓝牙关闭)
  • LandingPageView(已注册,蓝牙开启)
  • CategoryView(未注册)

如果用户点击 CategoryView,根据他的蓝牙连接状态,他会去任何一个(到目前为止,这部分工作正常):

  • WalkthroughView(蓝牙开启)
  • CheckerView(蓝牙关闭)

问题是 CategoryView 将始终通过 WalkthroughView,无论蓝牙是否打开。所以,这就是我的故事板的样子:

我知道,一团糟。由于 LogInView 和 CategoryView 在某些时候都可以进入 CheckerView,因此我需要一种方法来检查使用了哪些 segue,例如:

  • 如果之前的视图是 LogInView,CheckerView 将始终进入 LandingView,并且
  • 如果之前的视图是 CategoryView,它将始终进入 WalkthroughView。

我隐约知道prepareForSegue 函数,但我还不知道如何使用它,也不知道放在哪里(来自上一页,还是在接收页面上?)

有什么建议吗?谢谢。

【问题讨论】:

  • 您是否阅读过 UIViewController 类参考中的 prepareForSegue 文档?你看过任何关于使用 segues 的教程吗?如果检查器视图来自使用 prepareForSegue 的登录视图,您可以轻松地在检查器视图上设置布尔值。
  • 另一个想法是测试已注册/未注册,并根据该结果,使用performSegueWithIdentifier 来确定您将使用哪个segue。然后测试蓝牙启用/禁用。在prepareForSegue 中,您将设置您需要在下一个 VC 上设置的内容。 stackoverflow.com/questions/7864371/…

标签: ios objective-c uistoryboard uistoryboardsegue


【解决方案1】:

听起来您正在测试条件以确定您将在哪里继续。如果是这种情况,也许您可​​以测试条件(注册/未注册,蓝牙启用/禁用)。根据各种条件,您可以使用performSegueWithIdentifier 来确定下一步要去哪里,并使用segue 标识符在prepareForSegue 中设置下一个ViewController,而不是“回头”看看您来自哪里。

【讨论】:

    【解决方案2】:

    我的标准建议是,一旦应用程序状态变得复杂,就应该将其从视图控制器中移出并移到实际的数据模型对象中。

    数据模型可以是您创建的自定义类(首选可扩展性)。或者,在这种没有大量信息共享的情况下,您可以将其放入NSUserDefaults 并在需要时从那里读取。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多