2016-12-03 108 views
1

我有tableView行。如果我點擊行UIActivityIndicator開始動畫。但如果我滾動tableView指標消失。如何解決它?UIActivityIndi​​cator消失

UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
spinner.frame = CGRectMake(0, 0, 24, 24); 
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
cell.accessoryView = spinner; 
[spinner startAnimating]; 

回答

1

這是因爲您的單元格在滾動時重用。您需要在模型中保存UIActivityIndicator的動畫並按索引重新加載所需的單元格。

1

這不是一個「我應該添加到代碼中」的問題。這是一個「我不明白表格視圖如何工作」的問題。

告訴你一行一行的改變代碼不會幫助你。相反,你需要研究和理解表格視圖的工作方式。

表視圖單元格被創建,然後重複使用。當單元格在屏幕外滾動時,系統從屏幕上移除單元格並將其放入「回收站」。當新行滾動到視圖中時,系統會嘗試從回收站中取出一個單元格,並使用該單元格顯示新顯示行的信息,而不是創建新單元格。如果回收站中沒有所需類型的單元,它只會創建一個全新的單元。一旦創建了足夠的單元格來填充屏幕,當您滾動時,系統可能不需要創建任何新單元格。

回到您單元格上的活動指示器。

您將一個活動指示器添加到單元格並開始旋轉。然後用戶將該單元格滾動到屏幕外。該單元格將被重用以顯示不同的行。可能在某些時候,你會看到一個新的暴露的單元格,其中有一個你不期待的活動指標。

如果用戶然後滾動回到之前添加活動指示符的行,它將不會有旋轉活動指示符,除非您將該行的新單元格設置爲具有一個,否則您獲得的單元格從回收站恰好有一個旋轉活動指示器。您需要保存有關您對數據模型做了什麼的信息(「第6行的單元格正在等待下載」)。

然後,在您的cellForRowAtIndexPath方法中,您需要完全配置單元。創建您的細胞原型,以便細胞總是有一個活動指示器,但如果不旋轉則隱藏。如果某行的單元格需要活動指示符正在旋轉,請將其設置爲旋轉。如果它不需要旋轉活動指示器,請將指示器明確設置爲非旋轉狀態(因爲您可能正在處理一個循環單元,該單元被倒入具有旋轉活動指示器的回收站中)。還要將所有文本字段/標籤/文本視圖設置爲默認狀態。假定可能已經從默認狀態WAS更改的單元格上的每個單個視圖都從默認狀態更改並明確將其設置爲默認狀態。

相關問題