如何访问DIdSelectRowAtIndexPath中的段? [英] How to access segue in 'didSelectRowAtIndexPath'?

查看:19
本文介绍了如何访问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
    }
}

解释...

  1. 我使用索引路径作为发送方,因此可以轻松传递索引路径。您也可以使用其他UITableView方法检查当前选定的单元格,但我总是成功地使用这种方法
  2. 您不能将performSegueWithIdentifier放在Prepare for Segue方法中,因为performSegueWithIdentifier会导致prepareForSegue;您只是没有目标地循环。(当您要执行段时,始终会执行prepaareForSegue)
  3. prepareForSegue在选定行时不会自行运行。这是您需要didSelectRowAtIndexPath的地方。您需要一个performSegueWithIdentifier在前面描述的方法之外,它应该在didSelectRowAtIndexPath

这篇关于如何访问DIdSelectRowAtIndexPath中的段?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆