2015-10-28 31 views
0

我的應用程序中有一個UITableView,它顯示從服務器獲取的值。當值沒有準備好時,我在我的tableviewcell中顯示UIActivityIncicatorView而不是值。在執行[tableView reloadData]時,tableview單元格中的activity inicator視圖會發生什麼?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    ... 

    UIActivityIndicatorView *throbber = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
    throbber.frame = CGRectMake(0, 0, 24, 24); 
    cell.accessoryView = throbber; 
    [throbber startAnimating]; 

    ... 
} 

我很好奇的是,當我重裝了的tableView會發生什麼變化動畫UIActivityIndicatorView? (值可以準備就緒,並在不同的時間觸發[tableView reloadData])。

reloadData調用將調用cellForRowAtIndexPath方法並重新創建UIActivityIndicatorView

看起來有時候,動畫在reloadData調用中持續存在,有時動畫重新啓動,看起來應用程序正在被黑客入侵。

因此,有沒有人知道這件事?

回答

0

1您可以在此單元格中創建自定義單元格繼承UITableViewCell並創建UIActivityIndi​​catorView,因此,當您將重用您的單元格時,UIActivityIndi​​catorView將不會被重新創建。你需要調用一些自定義的方法中的cellForRowAtIndexPath啓動動畫

[cell startActivitiIndicatorAnimation] 

2這樣的事情

UIActivityIndicatorView *throbber = nil; 
if ([cell.accessoryView isKindOfClass:[UIActivityIndicatorView class]]) 
{ 
    throbber = (UIActivityIndicatorView *)cell.accessoryView; 
} else { 
    throbber = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
    throbber.frame = CGRectMake(0, 0, 24, 24); 
    cell.accessoryView = throbber; 
} 

[throbber startAnimating]; 
0

相反,這一指標添加到細胞作爲子視圖,創建變量,它和啓動/停止或演出/適當時隱藏。這種方式指示器將不會重新創建動畫。