2017-05-11 25 views
0

這是一個很長的一個,所以我感謝你的時間!我在重新排序UITableView的特定部分中的行時遇到了問題。Swift - 在一個tableView部分中移動一行,導致其他部分的標題被重新加載

上下文:我有一個具有多個節的UITableView(.plain樣式)。第0部分顯示了大量信息。第1部分是喜歡某些內容的用戶列表。第2部分是另一個不喜歡某些內容的用戶列表。第3部分是用戶生成的評論列表。表中的每個單元格和標題視圖都是從nib發起的自定義類。我允許用戶根據流行度對評論進行排序。當用戶點擊排序按鈕,下面的函數調用:

func sortOnPopular() { 

    if self.comments.isEmpty { 
     return 
    } 

    self.table.scrollToRow(at: IndexPath(row: 0, section: self.COMMENT_SEC), at: .top, animated: true) 

    //FIREBASE method 
    //returns a child from a node on the database that is sorted 
    //according to the parameter passed to it. The function returns 
    //each child one by one according to its rank in the sort. 
    _ = ref.child("not really important...").queryOrdered(byChild: "not important also").observe(.childAdded, with: { (snapshot) in 

     //Gets the index, i, of the sorted comment in the model, keys. 
     if let i = self.keys.index(of: snapshot.key) { 
      self.table.beginUpdates() 
      self.table.moveRow(at: IndexPath(row:i, section: self.COMMENT_SEC), to: IndexPath(row:0, section:self.COMMENT_SEC)) 
      self.keys.remove(at: i) 
      self.keys.insert(snapshot.key, at: 0) 
      self.table.endUpdates() 
     } 
    }) 
} 

問題:此代碼用來做工精美,當我只有在表視圖中的一個部分。一旦我添加了多個表,當調用這個函數時,表視圖會做一些奇怪的事情。例如,主內容顯示(Section 0)似乎會重新加載。在用戶點擊第0節中的排序按鈕後,其顏色變爲橙色。該按鈕將在短時間內保持橙色,但是,一旦排序完成,它將恢復爲其原始顏色。它應該保持橙色,直到用戶再次點擊按鈕。我在第0部分有圖像,這些圖像在調用此函數時也會重新下載。第0部分的標題背景是一個視覺效果暗模糊視圖;當這個函數被調用時,它不再模糊 - 它看起來是一個稍微透明的黑色視圖。而且,當這個函數被調用時,所有的頭部向上移動,然後回到原來的位置。

基於這一切,我認爲這個函數在某種程度上導致表視圖重新加載它的所有部分和行。

的問題:

(1)是否調用tableView.moveRow(在:對:)重載整個的tableView?如果是這樣,是否有辦法限制更新到特定的部分? (2)除非插入或刪除行,否則文檔中並沒有說需要使用tableView.beginUpdates()和.endUpdates()。他們在這裏需要嗎? (3)在tableView中插入行也會產生上述關於UIVisualEffectView渲染的結果。有沒有人有過這樣的經歷?

感謝您的耐心和您可以給予的任何建議!

回答

0

您的代碼顯示正常,但我們可能不得不考慮單元格超出查看區域以及何時重用單元格的情況。

我觀察到,當我們的時候,我們滾動單元複用過程中使用

tableView.scrollToRow(at: , at: UITableViewScrollPosition.top, animated: true)

與它一起移動使用

tableView.moveRow(at: , to:)

或者還行,結果是不一致的。

所以這是很好只是評論部分使用

reloadSections(_ sections: IndexSet, with animation: UITableViewRowAnimation)

後你解決你的數據重新加載。這將重新加載該部分並避免重用單元格的麻煩。

希望這會有所幫助。

相關問題