通过 tableview 中的按钮进行 segue 执行 2 个 segue 而不是一个

Posted

技术标签:

【中文标题】通过 tableview 中的按钮进行 segue 执行 2 个 segue 而不是一个【英文标题】:segue via button in tableview performs 2 segues instead of one 【发布时间】:2016-06-19 20:05:27 【问题描述】:

我制作了一个 tableview 控制器,并在原型单元格内添加了一个按钮。然后我为这个单元格制作了一个新的 swift 文件,我在其中拖动了这个按钮。

接下来,我创建了一个新的 tableview 文件,并添加了应该在按钮内显示的图像。到现在为止还挺好。

问题是这样的:我想从每个按钮执行一个 segue,它们都有自己的视图控制器(这比使用主视图控制器和细节视图控制器更容易,因为它们都非常不同)。我的问题如下:我希望使用此代码可以正常工作:

cell.sportButton.tag = indexPath.row
cell.sportButton.addTarget(self, action: #selector(TableViewControllerSport.buttonClicked), forControlEvents: .TouchUpInside)

功能按钮点击:

 func buttonClicked(sender: UIButton)

    let buttonRow = sender.tag

    if buttonRow == 0 
        self.performSegueWithIdentifier("segueSportinfrastructuur", sender: self)
    
    else if buttonRow == 1 
        self.performSegueWithIdentifier("segueSportdienst", sender: self)
    
    else if buttonRow == 2 
        self.performSegueWithIdentifier("segueSportraad", sender: self)
    
    else if buttonRow == 3 
        self.performSegueWithIdentifier("segueSportverenigingen", sender: self)
    
    else if buttonRow == 4 
        self.performSegueWithIdentifier("segueGsport", sender: self)
    
    else if buttonRow == 5 
        self.performSegueWithIdentifier("segueSportactiviteiten", sender: self)
    


其中引用了不同的 segue。问题是:当我单击其中一个按钮时,它总是会先执行“segueSportinfrastructuur”,然后再执行它应该执行的 segue。 因此,当我单击后退按钮时,应用程序会返回到“Sportinfrastructuur”VC,因此我必须再次单击后退按钮才能返回 tableView。

任何知道如何解决此问题的人,将不胜感激!

【问题讨论】:

听起来你的 segues 可能设置不正确。您可以考虑仔细检查您的每个转场是否从正确的视图控制器源到正确的视图控制器目标。另外,请注意视图控制器应该从视图控制器到视图控制器,而不是按钮到 IB 中的视图控制器。您的应用可能正在触发一个 segue “segueSportinfrastructuur”,以便它可以从右视图控制器触发另一个 segue。 检查您是否从 Interface Builder 中按钮的“动作”出口发送了一个 segue 那应该检查你有没有没有设置一个segue... 其中一个 segues 是在 tableviewcell 而不是 tableview 中开始的,不正确的设置确实是问题所在,谢谢! 【参考方案1】:

使用 didSelectRowAtIndexPath 不是更容易吗? 这里有一个很好的例子How to get textLabel of selected row in swift?

【讨论】:

我最终使用了 switch 设置,但我没有发现 didSelectRowAtIndexPath 在这个设置中更实用,但我想这只是个人喜好的一个例子【参考方案2】:

您可能通过情节提要附加了一个转场。可能是调用您通过从 tableview 拖放到其他控制器设置的 segue。

第二个可能正在从您的代码中调用。

【讨论】:

以上是关于通过 tableview 中的按钮进行 segue 执行 2 个 segue 而不是一个的主要内容,如果未能解决你的问题,请参考以下文章

segue放松后,TableView消失

如何在目标 c 中的按钮 Segue 后导航回来

在 Swift 中为嵌入式 tableView 中的 segue 做准备

Segue 导致 TableView 未对齐

两个不同的按钮对同一个视图控制器执行 segue,但希望通过一个按钮禁用用户交互以进行 segue

如何通过单击 tableview 单元格上的按钮获取文档 ID?