0

我正在使用一個UITableView,它是朋友列表(我有20個朋友)。在這20個朋友的單元格上,我有另一個部分中的一個名爲「ALL FRIENDS」的獨特單元格,它允許我通過一次單擊來選擇所有的朋友。爲什麼UITableView只能在可見單元上工作

選擇了這個「所有的朋友」小區,該代碼被稱爲:

var index = 0 
for friend in self.friendsList { 
    var indexPath = NSIndexPath(forRow: index, inSection: 1) 
    self.tableView.selectRowAtIndexPath(indexPath, animated: true, scrollPosition: UITableViewScrollPosition.None) 
    index += 1 
} 

一切工作正常,可見單元格。當選中一個單元格時,背景顏色會發生變化,但僅適用於可見單元格

任何想法爲什麼?

回答

2

因爲UITableView是動態顯示的,不可見的單元格不存在。

UITableView基本上使即將消失的單元出隊並將其追加到滾動的位置。要選擇所有單元格,你必須以不同的方式做到這一點:

  1. 你必須一個全局變量設置爲true,讓我們說var allSelected = true

  2. 然後調用self.tableView.reloadData()

  3. 將在tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellcell.selected = true反映。

這將確保所有未來顯示的單元格也將被選中。

0

所以Michal的回答很好,但我想給你一個選擇:你可以創建tableview而不會出現和重複使用單元格,所以單元格在所有點上都保持活動。

您可以通過創建單個細胞,並將它們添加到一個數組

var array = [UITableViewCell] 
for friend in self.friendsList { 
    var cell = UITableViewCell() 
    // customize your cell however you want, or use custom nibs 
    array.append(cell) 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) { 
    return array[indexPath.row] 
} 
+0

另一種解決方案確實做到這一點。你有沒有嘗試過使用100個單元格,每個單元都有一個圖像?查看調試導航器並檢查內存使用情況圖。有趣的是不是? – Michal

+0

我知道,我知道這不是建議。但是,再一次,我不知道他想用什麼。 20個細胞並不是那麼糟糕。 –

+0

我確實同意,對於一些非常罕見的場合 - 如果您確定該列表不會超過一些小數字 - 這可能是一個快速解決方案。 – Michal

相關問題