为什么UIBarButtonItem在segue之前没有调用IBAction?

时间:2015-07-08 22:18:28

标签: ios swift uiviewcontroller

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

问题是:

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

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

然后我再次按单击按钮再到视图控制器的源代码,创建一个IBAction方法。

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

由于某种原因,只发生了什么。

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

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

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

2 个答案:

答案 0 :(得分:5)

如果我想在调用segue之前做一些额外的步骤,我通常会将一个IBAction附加到UIButton,并在代码中从此调用perform segue。您可以在故事板中添加segue并为其提供ID,而无需将其连接到按钮。您可以通过控制单击viewcontroller并拖动到storyboard中的下一个viewcontroller来执行此操作。

答案 1 :(得分:2)

从故事板连接segue将自动执行segue。您可以在prepareForSegue方法中为转换到新视图控制器做任何准备。

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