2014-04-24 59 views
2

我有UITableView,當選擇UITableViewCell我調用Web服務來獲取新數據,然後用新數據重新加載UITableViewUiTableView後保持選定的部分/行reloadData

現在,選定的行將始終是返回的新數據的一部分。然而,一節中的行數不會是恆定的。

我想保留在重新加載表視圖後選擇的行上的選擇。我從didSelectRowAtIndexPath保存了indexPath。但是當我打電話時:

[self.tableView selectRowAtIndexPath:self.selectedIndexPath 
           animated:NO 
          scrollPosition:UITableViewScrollPositionNone]; 

沒有任何反應,我選擇的行在重新加載後不再選擇。無論如何在UITableView重新加載後保持選擇?

+0

你可以添加一些類型的選擇標誌的該數據? – DogCoffee

+0

數據在數組中 - 每當數據更改時發生選擇,我都會得到新數據副本。常數和始終保證的是從新數據中取回所選項目。 – Tander

+0

http://stackoverflow.com/questions/1827176/save-selected-row-in-uitableview-after-reloaddata – suhit

回答

4

嘗試

dispatch_async(dispatch_get_main_queue(), ^{ 
     [self.tableView selectRowAtIndexPath:self.selectedIndexPath 
            animated:NO 
          scrollPosition:UITableViewScrollPositionNone]; 
}); 

此外,確保,您self.indexPath屬性將重新加載UITableView後表示相同的細胞。

+0

這沒有幫助。我想也許問題在於細胞移動到不同的行。它仍然在同一部分,但從第4行(例如)移動到第1行,作爲該部分中剩下的唯一項目? – Tander

+0

所以你不應該依賴indexPath。您需要保存所選數據元素,並在重新加載後在新數據中找到它的索引。有了這個索引,你將能夠創建NSIndexPath對象並選擇有效的單元格 –

+0

我將如何保存所選元素?當我重新加載tableview時,數據模型會被刷新。當我不再需要它時,我不會存儲從內存中釋放的數據。如果我將索引路徑保存爲0,則可以使選擇工作。但正如您所指出的,如果存在多行,則可能會導致問題。 – Tander

0

reloadData之前,你最好保留選定的indexPath。

並且在重新使用selectRowAtIndexPath之後,設置選定的行。

,如:

NSArray<NSIndexPath *> *selectedIndexpathArray = self.itemsTableView.indexPathsForSelectedRows; // multiple selection 

NSIndexPath *selectedPath = self.itemsTableView.indexPathForSelectedRow; // single selection 

[self.tableView reloadData]; 

[self.tableView selectRowAtIndexPath:selectedPath animated:NO scrollPosition:UITableViewScrollPositionNone]; // single selection 

for (int i = 0; i < [selectedIndexPaths count]; i++) { 
    [tableView selectRowAtIndexPath:selectedIndexPaths[i] animated:NO scrollPosition:UITableViewScrollPositionNone]; // multiple selection 
}