【问题标题】:IOS Segue proper useIOS Segue 正确使用
【发布时间】:2016-10-25 19:51:52
【问题描述】:

我已经开始学习ios了。我来自网络开发背景。

我对何时从 ViewController 或特定按钮使用 segue 感到有些困惑。

例如:如果我有一个HomeViewController,那么当我点击它时,我有一个“同意条款”按钮,它将带我到TermsViewController。我应该从“同意条款”按钮还是通过选择整个 ViewController(从顶部栏中)来创建 segue?有哪些区别?

提前致谢

【问题讨论】:

  • 您好,您的问题应该更加具体。此外,您在一个问题中提出了多个问题,最好是针对一个问题并提供详细信息,以便人们获得更多信息来帮助您。
  • 谢谢@MagoNicolasPalacios 我会尽量说得更具体

标签: ios iphone swift segue


【解决方案1】:

我倾向于从视图控制器本身创建一个 segue。

然后,您将为视图控制器上的按钮创建一个 IBAction,并让操作调用 [self performSegueWithIdentifier:@"identifier"];

这或多或少正是从按钮创建 segue 的作用。如果这是您需要做的 100%,那是完全可以接受的。但这是一个更易于维护的解决方案,因为它允许您轻松地向按钮添加附加功能。即,假设您的按钮要求您将对象保存到服务器。您想在离开页面之前保存该对象,因此您将 performSegueWithIdentifier 调用放在保存的完成块中。

此外,使用标识符从情节提要创建转场允许您将该转场用于多个按钮。例如,假设您有一个带有 4 个按钮的视图控制器,它们都转到与该按钮相关的信息页面。您的故事板上只需要一个“goToInfo”segue,但您可以为那些进行不同设置的按钮设置 4 个单独的 IBAction,然后根据 IBAction 中为按钮设置的数据准备视图控制器。这会让你的故事板更干净一些,因为你不需要 4 个在 SB 上都可见的不同 segue,你只有 1 个。

tl;dr - 从按钮创建 segue 很好,只要这是 100% 按下按钮时唯一需要做的事情。如果后台还有其他事情需要发生,最好从 VC 创建 segue,并在完成其他步骤后通过其标识符调用它。

编辑 - 我想我稍微误导了你。您可以做的一件事是覆盖方法-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender。您设置 if / else if 链检查以查看 segue.identifier 是否等于您设置标识符的字符串,并且您可以在这些块中执行各种逻辑,即使您将 segue 直接附加到按钮也会被调用.唯一的问题是它是一个 void 函数,并且无论您在页面上输入的数据可能会发现任何问题,都将在此之后执行 segue。

现在,无论如何我通常都会重写这个方法,这样我就可以在 VC 之间传递数据。在将 segue.destinationViewController 转换为您知道的 ViewController 类之后,您可以在此处设置其属性。我不会在这里放置任何繁重的逻辑,当然也不会调用服务器。在这些情况下,您肯定希望通过执行逻辑/服务器调用的按钮设置 IBAction,并在您完成并知道一切正常时调用 performSegue

【讨论】:

    【解决方案2】:

    来自按钮

    它会调用你分配给它的segue。

    来自 viewController

    您必须自己致电performSegue(withIdentifier: String, sender: Any?)

    【讨论】:

    • 嗨@Honey,感谢您的回答。还有一件事,我可以从任何 ViewController 中调用 segue,还是仅从相关的 2 个中调用 segue?
    • @Eduardo 您在情节提要中创建的每个 Segue 都有一个 destinationViewcontroller 和一个 sourceViewcontroller。所以你只对他们有约束力。如果您希望能够在旅途中转入另一个 viewController,那么您必须以编程方式进行,而不使用转场并使用 showViewcontrollerpresentViewController
    • @Eduardo performSegueWithIdentifier 是一个实例方法,而不是类方法。它使用源自您调用它的 View Controller 的标识符检查转场,而不是情节提要上的任何转场。
    • @Honey segues 拥有sourceViewController的属性
    • @JakeT。谢谢你的评论。我的回答有什么问题吗?或者这只是对 Eduardo 的评论,以便更好地理解?
    猜你喜欢
    • 2014-03-23
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 2014-09-11
    相关资源
    最近更新 更多