我有一个带有自定义 TableViewCell 的自定义 TableViewController。我在 Storyboard上创建了一个从 Cell 到另一个 ViewController 的 segue 以显示详细信息,但从未调用过 prepareForSegue。我试过使用 didSelectRowAtIndexPath 但它也没有被调用。我怀疑这可能是因为我动态创建了自定义单元格并且它们没有从分配给它们的 Storyboard 中获取 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
}
有什么帮助吗?
最佳答案
从 InterfaceBuilder 中的 TableViewController 中拖动 segue,而不是从单元格中。然后,您可以通过 performSegueWithIdentifier
使用其在 didSelectRowAtIndexPath
中的标识符执行 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?) {
}
关于ios - 未从自定义 uitableviewcell 调用 prepareForSegue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26236975/