gpt4 book ai didi

ios - 如何访问 'didSelectRowAtIndexPath' 中的 segue?

转载 作者:搜寻专家 更新时间:2023-10-30 21:48:08 26 4
gpt4 key购买 nike

我知道如何使用来自 prepareForSegue 函数的 segues 传递数据,但是我有一个 TableViewCell,从中有两个可能的 segues 到两个不同的 ViewController(现在我们只说 A,B ).

有人建议here最好将 segues 连接到 View controller 而不是 tableCell 本身,这实际上工作得很好。但是我想在单击单元格时将信息传递给第二个 View Controller ,那么如何访问我连接到 Source ViewController 的 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)
}
}
}

再一次:这个问题不是关于通过prepareForSegue

传递信息

最佳答案

您应该使用 didSelectRowAtIndexPath 方法来确定是否选择了一个单元格,并将 indexPath 作为 segue 的发送者发送:

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
}
}

解释...

  1. 我使用索引路径作为发件人,因此我可以轻松地传递索引路径。您还可以使用其他 UITableView 方法检查当前选定的单元格,但我总是以这种方式成功完成
  2. 您不能将 performSegueWithIdentifier 放在 prepare for segue 方法中,因为 performSegueWithIdentifier 会导致 prepareForSegue;你只是在没有目标的情况下转来转去。 (当你想执行一个segue时,prepareForSegue总是被执行)
  3. prepareForSegue 在选择一行时不会自行运行。这是您需要 didSelectRowAtIndexPath 的地方。如前所述,您需要在方法之外使用 performSegueWithIdentifier,它应该在 didSelectRowAtIndexPath

关于ios - 如何访问 'didSelectRowAtIndexPath' 中的 segue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29974864/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com