2011-08-11 6 views
1

셀을 추가하거나 제거하면 추가 또는 제거 된 셀만 다시로드됩니다. 새 셀을 추가하거나 제거한 후에 모든 셀을 다시로드해야합니다.셀을 추가하거나 제거한 후 모든 표 셀을 다시로드하는 방법은 무엇입니까?

나는 [self.tableView reloadData]에 대해 알고 있지만, 셀을 추가하거나 제거한 직후 바로 호출하면 셀 추가/제거 애니메이션이 잘린다.

사실이 문제를 해결하는 방법을 생각해 냈지만, 다소 복잡하고 더 좋은 방법이있을 것이라고 생각했습니다. 동시에 애니메이션 수 : 후속 삽입, 삭제, 선택 작업 (및 indexPathsForVisibleRows 예를 들어, cellForRowAtIndexPath를) 원하는

[self.tableView deleteRowsAtIndexPaths:row_to_delete withRowAnimation:UITableViewRowAnimationRight]; 

double delayInSeconds = .25; 
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
    [self.tableView reloadData]; 
}); 

답변

1

전화 beginUpdates 경우 : 이것은 내가 지금 할 것입니다. 이 메소드 그룹은 endUpdates 호출로 종료되어야합니다. 이 메소드 쌍은 중첩 될 수 있습니다. 이 블록에서 삽입, 삭제 및 선택 호출을 수행하지 않으면 행 수와 같은 테이블 속성이 유효하지 않게 될 수 있습니다. 그룹 내에서 reloadData를 호출하면 안됩니다. 그룹 내에서이 메서드를 호출하면 직접 애니메이션을 수행해야합니다. 블록 내부에

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation 

:

[self.tableView beginUpdates]; 
[self.tableView deleteRowsAtIndexPaths:row_to_delete withRowAnimation:UITableViewRowAnimationRight]; 
[self.tableView endUpdates]; 
1

은 아마 당신이있는 tableView 방법을 사용할 수 있습니다

[tv beginUpdates]; 

// delete and reloadRows  

[tv endUpdates]; 
2

시도를 지연 테이블을 다시로드 할 수 있습니다. 삭제 후

,

[self performSelector:@selector(reloadTableview) withObject:nil afterDelay:0.35]; 

-(void) reloadTableview { 
    [self.YourTableView reloadData]; 
} 
관련 문제