如何创建可以从以编程方式创建的按钮调用的 segue?

Posted

技术标签:

【中文标题】如何创建可以从以编程方式创建的按钮调用的 segue?【英文标题】:How do I create a segue that can be called from a button that is created programmatically? 【发布时间】:2014-12-14 22:10:52 【问题描述】:

在 Swift 中,我有一个以编程方式创建的按钮:

var button = UIBarButtonItem(title: "Tableau", style: .Plain, target: self, action: "tabBarTableauClicked")

我希望当用户单击按钮时它会更改视图控制器。 这是tabBarTableauClicked的代码:

func tabBarTableauClicked()
    performSegueWithIdentifier("tableau", sender: self)

但它显然不起作用,因为没有名为“tableau”的标识符的segue。

我无法使用 Ctrl + 单击按钮并拖动到第二个 viewController 来创建 segue,因为该按钮是通过编程方式创建的,而不是在 Storyboard 中。

如何在 Swift 中以编程方式创建带有标识符的 segue?

【问题讨论】:

无法在情节提要之外创建转场。 ***.com/questions/9674685/… 你的第一个和第二个视图控制器在情节提要中吗? 是的,但按钮不是 只要您有两个视图控制器在情节提要中,那么您就可以在那里创建转场并以编程方式触发它们。您不需要故事板中的按钮来触发 segue,拥有该按钮所在的视图控制器就足够了! 【参考方案1】:

这里是如何设置一个 segue 以便可以通过编程方式调用它。

控制从第一个视图控制器中的 ViewController 图标拖动到第二个视图控制器。 点击两个视图控制器之间的segue箭头,在右侧的Attributes Inspector中,给segue一个Identifier(tableau 在你的情况下)。 然后您可以在代码中使用performSegueWithIdentifier 触发segue。

您可以阅读更多关于设置和使用 segues here.

【讨论】:

我试过这个,但我仍然得到同样的“没有标识符'someIdentifier'的segue”错误...... @MarkLöwe,OP 想要从他以编程方式创建的按钮触发一个转场。他错误地认为 segue 无法连接,因为故事板中不存在该按钮。我向他展示了只要两个 VC 都存在于 Storyboard 中,就可以连接 segue,然后以编程方式创建的按钮可以触发该 segue。我解决了他想做的事情,如果不完全是他的问题。 @someguy 你需要在你的视图控制器之间点击故事板上的segue图标,然后在右边的菜单中,给它一个标识符 @Honey,如果 segue 是通过按钮连接的,则无需调用 performSegue(withIdentifier:sender:),因为 ios 会为您触发 segue。如果你想以编程方式触发 segue,你应该从 viewController 连接它。 @Honey,它执行连接到按钮的segue,并将按钮作为sender发送。这是Apple的文档。 developer.apple.com/library/content/featuredarticles/…

以上是关于如何创建可以从以编程方式创建的按钮调用的 segue?的主要内容,如果未能解决你的问题,请参考以下文章

Segue 和 Button 以编程方式快速

如何从以编程方式创建的 UITableView 中分离?

如何以编程方式执行Unwind segue?

使用以编程方式创建的按钮连接 segue

手动使用 Segue

从以编程方式创建的tableViewCell中删除图像