2014-06-23 38 views
0

所以我得到了這個方法,我在didSelectRowAtIndexPath撥打:iOS7:泰伯維不加載附件改變

- (void)selectTableViewRow:(int)row { 
[[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]] setAccessoryType:UITableViewCellAccessoryNone]; 
[[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:1]] setAccessoryType:UITableViewCellAccessoryNone]; 
[[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:2 inSection:1]] setAccessoryType:UITableViewCellAccessoryNone]; 
[[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:row inSection:1]] setAccessoryType:UITableViewCellAccessoryCheckmark]; 
} 

(這是隻有三個單元,從而沒有for循環)

它完美的罰款。當一個單元格被選中時,出現一個複選標記,其他單元被刪除。 但是,當我在viewDidLoad中調用此方法時,圖形上沒有任何變化。

我必須重新加載setAccessoryType後表視圖?

回答

1

這是因爲-viewDidLoad完成後您的tableView將重新加載其數據。這意味着您的表格視圖將在您的表格視圖數據源中調用-tableView:cellForRowAtIndexPath:,並且它將使用此處指定的任何單元格附件。

你應該tableView:cellForRowAtIndexPath:

+0

謝謝,我只是做在故事板整個表視圖,所以我有點困惑:d –

1

在viewDidLoad中時指定你的配件,將沒有生成你的細胞在需要直到他們。你必須在這裏小心,因爲cellForRowAtIndexPath,如果正確完成可以生成全新的單元格,並拋出已經創建的單元格。您應該將setAccessoryType的代碼移動到cellForRowAnIndexPath中,並檢查每個單元格是否應根據設置爲當前選定行的變量進行選擇,並將其與indexPath.row進行比較。 問題是iOS可以折騰和重用單元格。如果您在例程中設置單元格1的附件視圖,它可能會滾動結束,並在其他地方重複使用,現在稱爲單元格7.因此單元格7具有已檢查的輔助視圖,並且單元格1在屏幕外。
換句話說,cellForRowAtIndexPath將單元格提供給tableView。您可以根據您使用的indexPath正確設置其內容,特別是在重複使用單元格時 - 必須清除附件視圖或將其設置爲每個被調用的單元格。

+0

你說得對,我不知道。我知道設置在飾品'的tableView:的cellForRowAtIndexPath:'和重新載入'didSelectRowAtIndexPath方法表視圖的數據:' –

+0

是的,你必須確保通過的cellForRowAtIndexPath的每一個電話,在單元格中的數據被設置爲indexPath.row什麼指定。 –