从 didSelectRowAtIndexPath 执行 segue 不起作用

Posted

技术标签:

【中文标题】从 didSelectRowAtIndexPath 执行 segue 不起作用【英文标题】:Performing segue from didSelectRowAtIndexPath does not work 【发布时间】:2015-03-06 19:39:02 【问题描述】:

我的didSelectRowAtIndexPath 方法中有一个performSegueWithIdentifier,但它的行为非常奇怪。我在目标 VC 中有一个 tableView。当按下单元格时,segue 触发并触发目标 VC 中的 viewDidLoad 方法,但我必须再次点击屏幕才能开始填充表格视图并显示 VC。

这只发生在我从 didSelectRowAtIndexPath 执行转场时,而不是当我从按钮操作执行时。

我觉得这很奇怪,不知道哪里出了问题。

编辑:我的didSelectRowAtIndexPath-方法:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 

    let selectedCell:CategoryTableViewCell = self.categoriesTV.cellForRowAtIndexPath(indexPath) as! CategoryTableViewCell

     if selectedCell.categoryLabel.text == "VW" 

        self.performSegueWithIdentifier("chart", sender: self)
        self.datatypeToSend = "VW"
        self.chartTitleToSend = selectedCell.categoryLabel.text!

     else if selectedCell.categoryLabel.text == "Porche"

        self.performSegueWithIdentifier("chart", sender: self)
        self.datatypeToSend = "Porche"
        self.chartTitleToSend = selectedCell.categoryLabel.text!

     else if selectedCell.categoryLabel.text == "Lexus"

        self.performSegueWithIdentifier("chart", sender: self)
        self.datatypeToSend = "Lexus"
        self.chartTitleToSend = selectedCell.categoryLabel.text!

     else if selectedCell.categoryLabel.text == "BMW"

        self.performSegueWithIdentifier("chart", sender: self)
        self.datatypeToSend = "BMW"
        self.chartTitleToSend = selectedCell.categoryLabel.text!


     else if selectedCell.categoryLabel.text == "Toyota"

        self.performSegueWithIdentifier("chart", sender: self)
        self.datatypeToSend = "Toyota"
        self.chartTitleToSend = selectedCell.categoryLabel.text!

    

编辑 2: 数据加载不是问题,无论我是否加载数据都会出现问题,但只有在我的表格视图单元格触发 segue 时才会出现问题。 p>

【问题讨论】:

那么当你必须第二次点击时,目标 VC 在屏幕中? 嗨,请输入一些代码,以便人们可以看到您的班级发生了什么。 @andrewbuilder 不,viewDidLoad 函数被调用,然后我点击所有其他方法开始运行,VC 最终显示它们何时完成。 只是把它扔在那里..你拥有的那个巨大的 if-else 语句可以简化为 3 行代码。 出现问题是因为您在调用performSegue…之后设置数据吗? 【参考方案1】:

您应该在执行转场之前设置数据。您的 if 语句也可以大大简化。尝试这样的方法:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)

    let selectedCell: CategoryTableViewCell = categoriesTV.cellForRowAtIndexPath(indexPath) as CategoryTableViewCell

    // Simplified version of your if-else statement. Notice the data is set before performing the segue as well, which is important.
    datatypeToSend = selectedCell.categoryLabel.text ?? ""
    chartTitleToSend = selectedCell.categoryLabel.text ?? ""
    performSegueWithIdentifier("chart", sender: self)

【讨论】:

以上是关于从 didSelectRowAtIndexPath 执行 segue 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

TableView:如何从 didSelectRowAtIndexPath 例程中选择另一行的值

从 didSelectRowAtIndexPath 发送到实例的无法识别的选择器

需要从自定义单元格中的 UITextField 中触发 didSelectRowAtIndexPath

如何从情节提要中的 didSelectRowAtIndexPath 打开视图控制器?

Swift 4.2 - 如何从 tableView 中的“didSelectRowAtIndexPath”方法调用“indexPath.row”到另一个类?

如何从调用方法didSelectRowAtIndexPath将数据传递给ios应用程序中的子视图控制器