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

24
在Swift中,我使用以下方式程序化地创建了一个按钮:
var button = UIBarButtonItem(title: "Tableau", style: .Plain, target: self, action: "tabBarTableauClicked")

我希望当用户点击按钮时,它可以更改视图控制器。

这里是tabBarTableauClicked的代码:

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

但很明显它没有起作用,因为没有一个名为“tableau”的标识符的segue。

我无法使用Ctrl +点击按钮并拖动到第二个viewController来创建segue,因为按钮是以编程方式而不是在故事板中创建的。

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


1
在Storyboard之外无法创建Segue。 - user3746428
你的第一个和第二个视图控制器是否在故事板中? - vacawama
是的,它们是,但按钮不是。 - Clément Bisaillon
只要你在故事板中拥有两个视图控制器,那么你就可以在那里创建segue并以编程方式触发它们。你不需要在故事板中放置一个按钮来触发segue,拥有该按钮所在的视图控制器就足够了! - mfaani
1个回答

91

以下是如何设置segue以便可以通过编程方式调用:

  • 从第一个视图控制器中的ViewController图标拖动控件到第二个视图控制器。
  • 点击两个视图控制器之间的segue箭头,在右侧的属性检查器中为segue命名(在你的情况下为tableau)。
  • 然后,您可以使用代码中的performSegueWithIdentifier触发segue。

enter image description here

您可以在此处了解有关设置和使用segue的更多信息。


1
我尝试过了,但仍然收到相同的“没有与标识符'someIdentifier'匹配的segue”错误... - SomeGuy
5
@MarkLöwe,OP想要从编程创建的按钮中触发转场。 他错误地认为无法连接转场,因为该按钮不存在于Storyboard中。我向他展示了只要两个VC存在于Storyboard中,就可以连接转场,然后通过编程创建的按钮触发该转场。我解决了他想做的事情,虽然不完全符合他的问题所问。 - vacawama
@someguy,你需要在故事板上的视图控制器之间单击segue图标,然后在右侧菜单中为其指定一个标识符。 - AlienWebguy
2
@Honey,如果segue是从按钮连接的,你不需要调用performSegue(withIdentifier:sender:),因为iOS会自动触发segue。如果你想通过编程方式触发segue,你应该从viewController中连接它。 - vacawama
1
@Honey,它执行与按钮连接的segue,并将按钮作为“sender”发送。这是苹果的文档。https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/UsingSegues.html - vacawama
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接