didDeselectRowAtIndexPath仅在按下另一个单元格后调用

时间:2015-05-16 15:50:32

标签: ios uitableview swift

所以这就是事情:

我用自定义单元格实现了一个UITableViewController。 然后我用cell to viewcontroller替换了自动segue viewcontroller to viewcontroller(故事板)。

来自我的UITableViewController的代码:

// MARK: - Tableview managment

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var lobbycell = tableView.dequeueReusableCellWithIdentifier("lobbycell") as! LobbyTableViewCell
        let row = indexPath.row
        if let channel = lobbies[row].lobbyName {
            lobbycell.lobbynameLabel.text = channel
        }
        if let usercount = lobbies[row].users?.count {
            lobbycell.usercountLabel.text = "Anzahl Spieler: \(usercount)"
        }
        if let host = lobbies[row].host?.username {
            lobbycell.hostnameLabel.text = "Host: \(host)"
        }
        return lobbycell
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return lobbies.count
    }

    override func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
        let selectedLobby = lobbies[indexPath.row]
        var loading = MBProgressHUD.showHUDAddedTo(self.view, animated: true)
        PFLobby.joinLobbyInBackgroundWithBlock(selectedLobby, user: PFUser.currentUser()!) { (success, error) -> Void in
            loading.hide(true)
            if success {
                self.performSegueWithIdentifier("joinLobby", sender: self)
            } else {

            }

        }
    }

现在问题出在这里: 如果我点击一个单元格,它会变灰(如选中),但不会调用didDeselectRowAtIndexPath函数。 只有当我点击另一个单元格时,它才会使用灰色(如所选)单元格的indexPath调用didDeselectRowAtIndexPath

The stuck cell

2 个答案:

答案 0 :(得分:4)

您是否对didSelectRowAtIndexPathdidDeselectRowAtIndexPath感到困惑?

只有在取消选择时才会调用后者,因此在您选择其他单元格后调用它的原因。

如果您想拨打didDeselectRowAtIndexPath,请在deselectRowAtIndexPath中添加didSelectRowAtIndexPath方法,它将取消选择正确的方式。

答案 1 :(得分:1)

这是预期的行为。只有在选择了另一个单元格后才会调用tableView(_:didDeselectRowAtIndexPath:)

如果需要,可以截取tableView(:_willSelectRowAtIndexPath:)中的选择事件:

override func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? {

    if let selectedIndex = tableView.indexPathForSelectedRow() where selectedIndex == indexPath {
        tableView.deselectRowAtIndexPath(indexPath, animated: true)
        return nil
    }

    return indexPath
}

将选择此方法返回的索引路径。如果您返回nil,则不会选择任何内容。