prepareForSegue関数からのセグエを使用してデータを渡す方法を知っていますが、2つの異なるViewControllerに2つの可能なセグエがあるTableViewCellがあります(今のところA、Bと言ってください)。 ここ テーブルセル自体ではなく、セグエをビューコントローラーに接続するのが最善であることが提案されました。これは実際には完全に機能しました。しかし、セルがクリックされたときに2番目のView Controllerに情報を渡したいので、Source ViewControllerに接続したsegueにアクセスする方法。
コード:
PrepareForSegueの内部
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
メソッドを使用する必要があります。
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.performSegueWithIdentifier("showQuestionnaire", sender: indexPath);
}
次に、prepareForSegue
メソッドで
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
}
}
説明する...
performSegueWithIdentifier
はperformSegueWithIdentifier
につながるため、prepare forsegueメソッド内にprepareForSegue
を入れることはできません。あなたはただ目的もなくぐるぐる回っています。 (セグエを実行したい場合は、prepareForSegueが常に実行されます)prepareForSegue
は単独では実行されません。ここでdidSelectRowAtIndexPath
が必要です。前述のように、メソッドの外部にperformSegueWithIdentifier
が必要です。これは、didSelectRowAtIndexPath
にある必要があります。