2013-05-07 33 views
2

我想要一個活動的指標在我的UITableView添加到某些細胞的控制。我成功做到這一點的方法didSelectRowAtIndexPath方法使用如何添加一個UIActivity指標,以每一個細胞和維護每個個體指標

CGRect CellFrame = CGRectMake(260, 10, 20, 20); 
    actindicator = [[UIActivityIndicatorView alloc]initWithFrame:CellFrame]; 
    [actindicator setHidesWhenStopped:NO]; 
    [actindicator setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleGray]; 
    actindicator.tag =1; 
    [[cell contentView] addSubview:actindicator]; 

美中不足的是,我需要控制從另一種方法,這些多重活動指標。然而,我想通過初始化一個新的actIndicator實例來實現這一點,但我忽略了除了活動指示符的'最新'初始化之外的所有參考,這意味着我只能控制一個。

什麼我需要在這裏(如果甚至可能嗎?)做,以保持參考所有actIndicators這樣我就可以開始製作動畫,所有的階段? 或者我可以以某種方式使用actindicator.tag來控制某種形式的參考。

非常感謝任何幫助。

編輯:(來自應答所得出)來訪問活動指示符的所有實例與1中的tableView標籤(可見細胞只)可以從另一方法如下使用方法:

for (UITableViewCell *cell in [self.tableView visibleCells]) { 
    UIActivityIndicatorView *actView = (UIActivityIndicatorView *)[cell.contentView 
    viewWithTag:1]; 
    [actView startAnimating]; 
    activityFlag = 1; 

} 

上述意願的方法循環遍歷所有可見的單元格並開始動畫指示器的動畫。

爲了處理的tableview的情況下被滾動,我重新使用動畫下面這是在的cellForRowAtIndexPath方法中的指標。 cellStateKey只是表示單元格旁邊是否有複選標記,如果它有一個複選標記,並且我的活動標記(正在進行異步Web服務器調用)被設置爲..然後我想繼續動畫(技術上重新啓動動畫,如滾動tableview停止吧)

if ([[rowData objectForKey:cellStateKey] boolValue]) { 

    cell.accessoryType = UITableViewCellAccessoryCheckmark; 

     if(cell.accessoryType == UITableViewCellAccessoryCheckmark &&activityFlag ==1){ 

     for (UIView *sub in [[cell contentView] subviews]) { 

      if (sub.tag == 1) { 

       UIActivityIndicatorView *acView = (UIActivityIndicatorView *) 
       [cell.contentView viewWithTag:1]; 
       [acView startAnimating]; 


      } 

     } 

正如原始的問題提到我初始化我的活動指標(和方法didSelectRowAtIndexPath方法

回答

3

一個簡單的方法來做到這一點(假設你要添加的指標,因爲在你的代碼)是先得到你的表可見單元格(或行)的集合,通過調用[tableView visibleCells]

for (UITableViewCell *cell in [tableView visibleCells]) { 
    for (UIView *sub in [cell subViews]) { 
     if (sub.tag == 1) { // "1" is not a good choice for a tag here 
      UIActivityIndicatorView *act = (UIActivityIndicatorView *)sub; 
      [act startAnimating]; // or whatever the command to start animating is 
      break; 
     } 
    } 
} 

有更多的複雜性,爲您解決:在你的原代碼,你需要確保你沒有增加一個額外活動的指標到每個預先存在的細胞,然後通過細胞像這樣的迭代時間cellForRowAtIndexPath被調用,並且您需要考慮用戶可能稍後滾動表的情況,從而暴露沒有打開其活動指示符的單元格。

+0

非常感謝!雖然這段代碼確實可以讓你從另一種方法訪問activityIndi​​cators,這種方法最終是我所追求的。我用它在滾動後重新制作指標。 – user1144466 2013-05-09 04:11:31

2

你需要通過擴展它來創建一個自定義的UITableViewCell刪除藏漢如果需要活動的指標)。然後有一個UIActivityIndi​​catorView作爲該Cell的成員。然後您可以訪問它並逐個單元格地控制它。

8

您可以添加UIActivityIndi​​catorView作爲細胞的accessoryView的。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

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

三江源,是的,這是我如何初始化選定單元格的好手。我更多的是在UIbutton出版後如何從另一種方法訪問這些spinners以開始動畫。請參閱編輯。 – user1144466 2013-05-09 03:51:55

1

假設活動視圖指標標籤是你可以嘗試這樣的cell.contentView獨特:

UITableViewCell *cell = [tableview cellForRowAtIndexPath:indexpath]; 

UIActivityIndicatorView *acView = (UIActivityIndicatorView *)[cell.contentView viewWithTag:1]; 

//acView will be your activitivyIndicator 
相關問題