swift update cell配件类型

时间:2014-09-28 08:28:24

标签: ios xcode swift

当我点击一个单元格时,我正在尝试更新我的表格单元附件类型。 这是代码:

var selectedCellArray :[FriendTableViewCell] = []
var friends: [PFUser] = []



    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    var  selectedCell = self.tableView(tableView, cellForRowAtIndexPath: indexPath) as FriendTableViewCell

    if (selectedCell.accessoryType == UITableViewCellAccessoryType.None){

        selectedCell.accessoryType = .Checkmark
        selectedCellArray.append(selectedCell)
    }else if (selectedCell.accessoryType == UITableViewCellAccessoryType.Checkmark){

        selectedCell.accessoryType = .None
        var index = 0
        for cell in selectedCellArray{
            if (cell != selectedCell){
                index++
            }else{
                break
            }
        }

        selectedCellArray.removeAtIndex(index)


    }
    self.tableView(tableView, cellForRowAtIndexPath: indexPath)



}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell = tableView.dequeueReusableCellWithIdentifier("friend") as? FriendTableViewCell ?? FriendTableViewCell()
    var round = 0
    var friend: AnyObject = self.friends[indexPath.row]


    cell.firstNameLabel.text = friend["firstName"] as? String

    cell.lastNameLabel.text = friend["lastName"] as? String
    println(selectedCellArray)
    round++
    var hasFound = false
    if (self.checkSelectedArray(selectedCellArray, target: cell)){
        cell.accessoryType = .Checkmark
    }else{
        cell.accessoryType = .None
    }

    cell.firstNameLabel.sizeToFit()
    cell.lastNameLabel.sizeToFit()
    return cell
}
func checkSelectedArray(selectedArray:[FriendTableViewCell], target:FriendTableViewCell) -> Bool{
    for cell in selectedCellArray{
        if cell.isEqual(target){
            return true
        }
    }
    return false
}

此外,是否有像array.contain这样的内置方法?目前,我自己写了一个函数来检查一个数组是否有某个元素......

请帮帮我......我被困在这个问题大约8个小时

1 个答案:

答案 0 :(得分:5)

存储对单元格的引用并不是一种有效的策略,因为当表格滚动时可以重复使用单元格。出于同样的原因,您无法使用当前的单元附件来指示选择状态。

您可以使用NSIndexSet或Swift词典。这是使用字典的实现 -

var selectedCells :Dictionary<String,PFUser>()

var friends: [PFUser] = []

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    let  selectedCell = tableView.cellForRowAtIndexPath(indexPath) as FriendTableViewCell

    let objectId=friends[indexPath.row].objectId

    if (selectedCells[objectId] != nil){
        selectedCell.accessoryType = .None
        selectedCells.removeValueForKey(objectId)
    } else 
        selectedCell.accessoryType = .Checkmark
        selectedCells[objectId]=friends[indexPath.row]
    }

    tableView.deselectRowAtIndexPath(indexPath, animated:false)

}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell = tableView.dequeueReusableCellWithIdentifier("friend") as? FriendTableViewCell ?? FriendTableViewCell()
    var round = 0
    var friend: AnyObject = self.friends[indexPath.row]

    cell.firstNameLabel.text = friend["firstName"] as? String

    cell.lastNameLabel.text = friend["lastName"] as? String

    if (selectedCells[friend.objectId] != nil){
        selectedCell.accessoryType = .Checkmark
    } else 
        selectedCell.accessoryType = .None
    }

    cell.firstNameLabel.sizeToFit()
    cell.lastNameLabel.sizeToFit()
    return cell
}