本文介绍了如何访问DIdSelectRowAtIndexPath中的段?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我知道如何使用preparareForSegue函数中的segues传递数据,但我有一个TableViewCell,从它有两个可能的segues到两个不同的ViewController(现在只说A、B)。
有人建议here最好将segues连接到View控制器,而不是TableCell本身,后者实际上工作得很好。但我希望在单击单元格时将信息传递给第二个视图控制器,因此如何访问我连接到源代码视图控制器的Segue。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showQuestionnaire"{
if let indexPath = self.tableView.indexPathForSelectedRow() {
let controller = (segue.destinationViewController as! UINavigationController).topViewController as! QuestionnaireController
let patientQuestionnaire = patientQuestionnaires[indexPath.row] as! PatientQuestionnaire
controller.selectedQuestionnaire = patientQuestionnaire
self.performSegueWithIdentifier("showQuestionnaire", sender: self)
}
}
}
再次声明:此问题与通过preparareForSegue
传递信息无关推荐答案
您应该使用didSelectRowAtIndexPath
方法来确定单元格是否被选中,并作为段的发送方发送indexPath
:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.performSegueWithIdentifier("showQuestionnaire", sender: indexPath);
}
然后在prepareForSegue
方法中,从sender
参数获取indexPath
并使用它传递正确的行/数据:
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if (segue.identifier == "showQuestionnaire") {
let controller = (segue.destinationViewController as! UINavigationController).topViewController as! QuestionnaireController
let row = (sender as! NSIndexPath).row; //we know that sender is an NSIndexPath here.
let patientQuestionnaire = patientQuestionnaires[row] as! PatientQuestionnaire
controller.selectedQuestionnaire = patientQuestionnaire
}
}
解释...
- 我使用索引路径作为发送方,因此可以轻松传递索引路径。您也可以使用其他UITableView方法检查当前选定的单元格,但我总是成功地使用这种方法
- 您不能将
performSegueWithIdentifier
放在Prepare for Segue方法中,因为performSegueWithIdentifier
会导致prepareForSegue
;您只是没有目标地循环。(当您要执行段时,始终会执行prepaareForSegue) prepareForSegue
在选定行时不会自行运行。这是您需要didSelectRowAtIndexPath
的地方。您需要一个performSegueWithIdentifier
在前面描述的方法之外,它应该在didSelectRowAtIndexPath
中
这篇关于如何访问DIdSelectRowAtIndexPath中的段?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!