2014-09-28 3 views
2

Я пытаюсь обновить мой тип ячейки ячейки, когда я нажимаю на ячейку. вот код:быстрое обновление ячейка принадлежности тип

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 часов

+0

Нельзя хранить ссылку на ячейку в вашем 'selectedCellArray', поскольку ячейки могут повторно использоваться при прокрутке таблицы. Вы не можете использовать текущий тип аксессуаров ячейки по той же причине. Вы должны сохранить номер строки для выбранных ячеек. Вы также можете использовать 'NSIndexSet'. Это немного сложно, если вы разрешаете переупорядочивать строки, вставлять или удалять, однако, поскольку вам необходимо обновить сохраненные индексы, – Paulw11

ответ

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 
} 
+0

решил проблему! благодаря! – AdamXiaotCao

+0

в Swift 2.2 use: var selectedCells = [String: PFUser](), чтобы получить пустой Dict. –

Смежные вопросы