Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

prepareForSegue not called from custom uitableviewcell

I have a custom TableViewController with a custom TableViewCell. I created a segue on the storyboard from the Cell to another ViewController to display the details but prepareForSegue is never called. I've tried using didSelectRowAtIndexPath but its not called either. I suspect it may be because I create the custom cells dynamically and they don't get the segue from the storyboard assigned to them, but I couldn't find a way to do so. The "newSegue" from my BarButtonItem is called normally.

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
    println("PREPARE FOR SEGUE")
    if segue.identifier == "newSegue" {
        println("PREPARE FOR NEW SEGUE")
    } else if segue.identifier == "detailSegue" {
        println("PREPARE FOR DETAIL SEGUE")
    }
}

override func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
    println("You selected cell!")
}

I suspect I might be doing something wrong when defining my custom cell:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let CellIndentifier: NSString = "ListPrototypeCell"

    var cell : MyTableViewCell = tableView.dequeueReusableCellWithIdentifier(CellIndentifier) as MyTableViewCell

    var myClass: MyClass = self.myList.objectAtIndex(indexPath.row) as MyClass

    cell.setCell(author: myClass.author, message: myClass.message)

    return cell

}

Any help?

like image 953
filipebarretto Avatar asked Oct 21 '22 00:10

filipebarretto


1 Answers

Drag the segue from the TableViewController in InterfaceBuilder, not from the cell. Then you can perform the segue with its identifier in didSelectRowAtIndexPath via performSegueWithIdentifier.

Also check the function signatures. The exclamation marks for implicitly unwrapped optionals are no longer needed:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    let cell = tableView.cellForRowAtIndexPath(indexPath)
    tableView.deselectRowAtIndexPath(indexPath, animated: true)
    performSegueWithIdentifier("mySegue", sender: cell)
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
}
like image 161
zisoft Avatar answered Nov 15 '22 16:11

zisoft