how to access segue in 'didSelectRowAtIndexPath' - Swift/IOS

后端 未结 1 1972
孤街浪徒
孤街浪徒 2020-12-28 10:47

I know how to pass data using segues from prepareForSegue function, but the thing i have a TableViewCell from which there are two possible segues to two dif

相关标签:
1条回答
  • 2020-12-28 10:57

    You should be using the didSelectRowAtIndexPath method to determine whether or not a cell was selected.

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        self.performSegueWithIdentifier("showQuestionnaire", sender: indexPath);
    }
    

    Then in your prepareForSegue method

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

    To explain...

    1. I used the index path as the sender so I can easily pass the index path. You could also check for the currently selected cell using other UITableView methods, but I've always done it this way with success
    2. You can't put performSegueWithIdentifier within the prepare for segue method, because performSegueWithIdentifier leads to prepareForSegue; You are just looping around and around with no aim. (When you want to perform a segue, prepareForSegue is always executed)
    3. prepareForSegue doesn't run by itself when a row is selected. This is where you need didSelectRowAtIndexPath. You need a performSegueWithIdentifier outside of the method as described previously, which should be in didSelectRowAtIndexPath
    0 讨论(0)
提交回复
热议问题