两次轻按后,didDeselectRowAt被调用

时间:2019-04-04 15:49:42

标签: ios swift uitableview

第一次点击后,该行将突出显示(灰色背景),然后我必须点击以下任何行以执行segue。

我确实得到了正确的读数,例如,indexPath.row如果我最初点击第一行就返回0,那么紧接着我点击哪一行就可以了。

它是UITableViewController的子类

override func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
    // delegate?.onSelect(users![indexPath.row])
    print("selected %d", indexPath.row)
    self.performSegue(withIdentifier: "segueToUserForm", sender: users![indexPath.row])
}

我确实从模拟器的硬件菜单中删除了所有内容和设置。

2 个答案:

答案 0 :(得分:1)

似乎您正在使用didDeselectRowAt。这意味着此代码不是在第一次点击tableCell之后才调用,而是在第二次点击取消选中时调用。因此,您的代码不应是这样:

    override func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
        // delegate?.onSelect(users![indexPath.row])
        print("selected %d", indexPath.row)
        self.performSegue(withIdentifier: "segueToUserForm", sender: users![indexPath.row])
    }

但是这个:

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        // delegate?.onSelect(users![indexPath.row])
        print("selected %d", indexPath.row)
        self.performSegue(withIdentifier: "segueToUserForm", sender: users![indexPath.row])
    }

当然,didDeselectRowAt在特定情况下很有用,但是,在您的情况下似乎没有用。简而言之,将didDeselctRowAt替换为didSelectRowAt

答案 1 :(得分:0)

您应该使用didSelectRowAt而不是didDeselectRowAt来执行segue。 didDeselectRowAt正在第二次点击中触发,因为第一次点击会触发didSelectRowAt

  override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
       //Your Code
    }