prepareForSegue未从自定义uitableviewcell调用

时间:2014-10-07 13:17:05

标签: ios uitableview swift

我有一个带有自定义TableViewCell的自定义TableViewController。我在故事板上创建了一个segue,从Cell到另一个ViewController来显示细节,但是从未调用prepareForSegue。我已经尝试过使用didSelectRowAtIndexPath但它没有被调用。我怀疑这可能是因为我动态创建了自定义单元格并且它们没有从分配给它们的故事板中获取segue,但我找不到这样做的方法。我的BarButtonItem中的“newSegue”被正常调用。

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!")
}

我怀疑在定义自定义单元格时可能会出错:

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

}

任何帮助?

1 个答案:

答案 0 :(得分:3)

从InterfaceBuilder中的TableViewController拖动se​​gue,而不是从单元格拖动。然后,您可以didSelectRowAtIndexPath通过performSegueWithIdentifier执行带有标识符的segue。

同时检查功能签名。不再需要隐式展开的选项的惊叹号:

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?) {
}