2012-07-07 4 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'을 설정합니까? –

+0

@ BjörnKaiser 나는 일반적으로'- (UITableViewCell *) tableView : (UITableView *) tableView cellForRowAtIndexPath : (NSIndexPath *) indexPath'에 셀을 설정한다. 그러나, 위의 메소드에서'cell'을 얻는 방법을 보여주기 위해 지금 코드를 바꿀 것입니다. –

+0

다운로드 여부를 결정하는 코드가 맞는지 이미 확인했다고 가정합니다. –

답변

3

셀에 대한 활동 표시기를 설정하는 경우에도 인스턴스 변수는 하나만 사용됩니다. 이 작업을 수행하는 방법은 당신은 UIActivityIndicatorView에 대한 태그를 설정할 수 있습니다 당신이 그것을 액세스하거나 그것을 잡아 할 때마다 셀을 얻을 수 있고, [cellView viewWithTag:theTag]를 사용하여 표시보기를 얻을 tableView:cellForRowAtIndexPath:

내부의 각 셀에 대한 지표를 만드는 것입니다 . 인스턴스 변수가 필요 없습니다.

당신이 UITableViewCell를 서브 클래스 및 사용자 정의 세포 내에서하고 싶은대로 할 수도 애호가 것을 확인하려면

..

편집 :

당신이 할 수있는보기 중 하나를 얻으려면 액세서리보기로 할당하고 바로 얻을 세포 accessoryView을 :

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

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

하거나 cell`에 UIActivityIndicatorView를 추가 할 수 있습니다 S있는 contentView (당신이 원하는 지금, 당신은 더 많은 유연성을 가지고 당신이 그것을 배치 할 수있는 방법) :

표시기를 추가는 :

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

가 표시 방법 :

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

희망이

을하는 데 도움이
+0

그게 효과가있는 것 같습니다. 어떻게 내 예제에서'셀'에서'cellView'를 얻을 수 있습니까? 감사합니다 –

+0

내 편집 된 답변을 확인하십시오. 행운을 빕니다! – KDaker

관련 문제