我有一个自定义类(超类UITableViewController
)。
我有一个添加按钮:
selectRowAtIndexPath
。didSelectRowAtIndexPath
。不幸的是,在以编程方式选择行之后没有调用didDeselectRowAtIndexPath
。
注意:使用Swift(不是Objective-C)。
@IBAction func addButton(sender: UIBarButtonItem) {
let indexPathZero: NSIndexPath = NSIndexPath(forRow: 0, inSection: 0)
todoController.addNewTodoItem(nameOfItem: "test5")
self.tableView.beginUpdates()
self.tableView.insertRowsAtIndexPaths([indexPathZero], withRowAnimation: UITableViewRowAnimation.Top)
self.tableView.contentOffset.y = 64
self.tableView.endUpdates()
// Ask user for input
editCell(indexPathZero)
}
func editCell(indexPath: NSIndexPath) {
self.tableView.selectRowAtIndexPath(indexPath, animated: true, scrollPosition: UITableViewScrollPosition.None)
self.tableView(self.tableView, didSelectRowAtIndexPath: indexPath)
}
解决方案
let indexPathZero: NSIndexPath = NSIndexPath(forRow: 0, inSection: 0)
todoController.addNewTodoItem(nameOfItem: "test5")
let currSelectedIndexPath = self.tableView.indexPathForSelectedRow()
if currSelectedIndexPath != nil {
self.tableView.deselectRowAtIndexPath(currSelectedIndexPath!, animated: true)
self.tableView(self.tableView, didDeselectRowAtIndexPath: currSelectedIndexPath!)
}
self.tableView.beginUpdates()
self.tableView.insertRowsAtIndexPaths([indexPathZero], withRowAnimation: UITableViewRowAnimation.Top)
self.tableView.contentOffset.y = 64
self.tableView.endUpdates()
// Ask user for input
editCell(indexPathZero)
答案 0 :(得分:2)
请参阅apple docs。当您致电selectRowAtIndexPath
时,它将不会致电didSelectRowAtIndexPath
。
“调用此方法不会导致代理收到tableView:willSelectRowAtIndexPath:
或tableView:didSelectRowAtIndexPath:
消息,也不会向观察者发送UITableViewSelectionDidChangeNotification
通知。”