2017-04-10 74 views
0

我有一種類型的UITableViewCell,它允許用戶在運行時添加/刪除儘可能多的UITextView。在運行時重用使用動態佈局內容的單元格

我試圖重複使用/取出此類型的單元格時遇到問題,因爲有時tableview單元格在上下滾動時剛剛開始重疊。當我退出/返回單元格時,我正在運行一個設置方法(它首先在內部啓動一個拆卸方法以刪除所有先前的視圖),並使用該模型來設置/恢復所有必要的視圖和佈局約束。

if let cell = tableView.dequeueReusableCell(withIdentifier: "MultipleContentCell", for: indexPath) as? MultipleChoiceTableViewCell { 
        cell.setupCellWithModel(model: model) 
        cell.setNeedsUpdateConstraints() 
        cell.updateConstraintsIfNeeded() 
        cell.delegate = self 

        return cell 
       } 

我真的不能弄清楚爲什麼細胞有時在tableview中重疊,但我猜它與佈局上飛被重新做。我正在考慮不要重複使用這些類型的單元格並將它們存儲在列表中。

我的問題是:可重複使用的單元總是假定具有相同的通用UIView佈局,只有內容更改?我不應該使用這些類型的細胞嗎?還是有人經歷過這個?

謝謝

回答

0

UITextView在每次出列單元格並且永不刪除時創建。修復使用函數prepareForReuse()。您必須定義,您的單元格應該在MultipleChoiceTableViewCell中出列之前執行的操作。例如:

override func prepareForReuse() { 
    super.prepareForReuse() 

    for view in speciesName.subviews { 
     if view is UITableView { 
      view.removeFromSuperview() 
     } 
    } 
} 

我前幾天加入了類似的問題:

Cells in UITableView overlapping. Many cells in one place

如果你有一些問題,我可以盡力幫助您更明天。 乾杯!

0

一般來說,是的。您希望您的單元格的物理佈局是靜態的,並且只有在回收它們時纔會改變內容。如果您將視圖添加到cellForRow(at:)中的單元格中,則負擔是管理額外的字段以避免重複的視圖。

您的情況下,您可以根據用戶交互向表視圖單元格添加可變數量的視圖,這是一種奇怪的情況,您可能需要隨時添加和刪除單元格。處理這種

一種方法是把所有的文本字段的在容器視圖中,添加一個出口到容器視圖,然後只需在prepareForReuse或cellForRowAt功能使用這樣的代碼:

containerView.subviews.forEach { $0.removeFromSuperview() } 
相關問題