从 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”到另一个类?