在以编程方式选择行之后未调用的UITableView didDeselectRowAtIndexPath委托方法

时间:2015-03-24 17:02:05

标签: ios uitableview swift

我有一个自定义类(超类UITableViewController)。

我有一个添加按钮:

  1. 开始表格更新。
  2. 在表格中插入行。
  3. 结束表格更新。
  4. 致电selectRowAtIndexPath
  5. 致电didSelectRowAtIndexPath
  6. 不幸的是,在以编程方式选择行之后没有调用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)
    

1 个答案:

答案 0 :(得分:2)

请参阅apple docs。当您致电selectRowAtIndexPath时,它将不会致电didSelectRowAtIndexPath

“调用此方法不会导致代理收到tableView:willSelectRowAtIndexPath:tableView:didSelectRowAtIndexPath:消息,也不会向观察者发送UITableViewSelectionDidChangeNotification通知。”