【问题标题】:Why UIBarButtonItem doesn't call IBAction before segue?为什么 UIBarButtonItem 在 segue 之前不调用 IBAction?
【发布时间】:2015-09-27 01:55:54
【问题描述】:

我的问题非常类似于:Swift: Make button trigger segue to new scene

问题是:

我有一个视图控制器,有一个按钮可以使另一个视图控制器以模态方式出现。

我有 Ctrl+Click 从按钮到第二个视图控制器,并在 IB 中创建了 segue。

然后我从按钮再次Ctrl+Click到视图控制器的源代码中创建一个IBAction方法。

我假设按钮现在会做两件事:a) 调用 IBAction 方法,b) 执行 segue。

由于某种原因,发生的只是转场。

当我删除 segue 或从 IB 移除对视图控制器的调用时,会调用 IBAction,但 Xcode 告诉我现在无法访问第二个视图控制器。

我希望能够向用户呈现一个 ActionSheet,然后能够根据用户从操作表中选择的内容对第二个视图控制器执行Segue。

我知道我可以以编程方式调用 performSegue,但这需要创建 segue 并将其附加到 IB 中的物理按钮,这违背了不调用该按钮可能已经具有的 IBAction 的目的。

【问题讨论】:

标签: ios swift uiviewcontroller


【解决方案1】:

如果我想在调用 segue 之前执行一些额外的步骤,我通常会在 UIButton 上附加一个 IBAction 并在代码中在其中调用 perform segue。您可以将 segue 添加到情节提要并为其指定 ID,而无需将其连接到按钮。为此,您可以按住控件单击视图控制器并拖动到情节提要中的下一个视图控制器。

【讨论】:

    【解决方案2】:

    从情节提要连接转场将始终自动执行转场。您可以在prepareForSegue 方法中为转换到新的视图控制器做任何准备。

    如果之前有一些逻辑,例如用户从操作表中选择某些内容,只需使用 IBAction,然后根据用户选择使用 performSegueWithIdentifier 执行 segue。但是,您不必创建另一个按钮,只需 ctrl+drag 从一个视图控制器到另一个视图控制器并给 segue 一个标识符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-31
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      相关资源
      最近更新 更多