2012-07-07 59 views
0

我有一個UITableView填充了顯示文件名的單元格,單元格還指示文件的上載/下載進度。當文件正在移動時,其相應的單元應在其附件視圖中顯示UIActivityIndicatorView。我有一個UIActivityIndicatorView設置,並準備進入viewDidLoad,,但是當我試圖將其設置爲多個單元的附件視圖時,它僅在一個單元中顯示。活動指標只在一個單元格中顯示

-(void)viewDidLoad { 

    [super viewDidLoad]; 

    activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
    [activityIndicator startAnimating]; 

} 


//...code that detects file changes and calls fileChange 


-(void)fileChange { 

    for (int i = 0; i < [self.cloudNames count]; i++) { 

     //detect whether file name in array is uploading, downloading, or doing nothing 

     NSIndexPath *indexPath = [NSIndexPath indexPathForRow:i inSection:0]; 
     UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 

     if (downloading) { 

      cell.accessoryView = activityIndicator; 
      //other changes here specific to downloads 

     } else if (uploading) { 

      cell.accessoryView = activityIndicator; 
      //other changes here specific to uploads 

     } else { 

      cell.accessoryView = nil; 

     } 

    } 

} 

正如我所說的,活動指示燈只顯示一個細胞即使有多個單元格中要顯示它

我不想在fileChange方法中設置UIActivityIndicatorView方法(即使它有效),因爲在上載/下載過程中多次調用此方法。如果方法被調用並且在那裏設置了活動指示符,那麼當調用該方法時,活動指示符將重置在所有表視圖單元格中,導致動畫出現毛刺和不平滑,並導致巨大的內存問題。

任何想法該怎麼做?謝謝。

+0

你在哪裏設置'cell'? – 2012-07-07 19:40:09

+0

@BjörnKaiser我通常在' - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath'中設置單元格。但是,我現在將更改我的代碼,以向您展示如何在上述方法中獲取'cell'。 – 2012-07-07 19:42:13

+0

我假設你已經檢查過是否確定下載的代碼是否正確? – 2012-07-07 19:46:51

回答

3

即使您正在設置單元格的活動指示符,您也只有一個實例變量。做到這一點的方法是創建內部tableView:cellForRowAtIndexPath:

爲每個單元的指標可以設置標籤爲UIActivityIndicatorView,每當你想訪問或抓住它,你可以得到的細胞,並獲得使用[cellView viewWithTag:theTag]指標視圖。不需要實例變量。

如果你想使事情變得更炫,那麼可以繼承UITableViewCell,做任何你希望你的自定義單元格內做..

編輯:

要獲得視圖中,您既可以分配給附屬視圖和剛剛得到的細胞accessoryView的:

UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 

UIActivityIndicatorView *indicator = (UIActivityIndicatorView *) cell.accessoryView; 

,或者你可以將UIActivityIndi​​catorView添加到cell`小號內容查看(這樣你可以把它放在任何你想要的,你有更多的靈活性):

添加指標:

myIndicatorView.tag = 1; 
[cell.contentView addSubview:myIndicatorView]; 

得到指示:

UIActivityIndicatorView *indicator = [cell.contentView viewWithTag:1]; 

希望這有助於

+0

看起來應該可以工作。在我的例子中,如何從'cell'獲取'cellView'?謝謝 – 2012-07-07 20:14:28

+0

檢查我編輯的答案。祝你好運! – KDaker 2012-07-07 20:23:34

相關問題