2011-03-08 2 views
9

테이블보기에서 일부 셀을 다시로드하고 있습니다. 다시로드가 완료되면 스크롤 할 수 있도록 표시하려고합니다. scrollToRowAtIndexPath : atScrollPosition : 메서드를 알고 있습니다. 하지만 다시로드가 행 높이를 변경하므로 완료된 후에 다시로드해야합니다.UITableView 재로드가 완료되면 콜백을받을 수 있습니까?

여기 몇 가지 관련 질문이 있지만 내 질문에는 답이 없습니다.
UITableView , Scroll to bottom on reload?
How to Start UITableView on the Last Cell

편집 - 내 다시로드 삽입하거나 행이 삭제되지 않습니다. 오히려 업데이트 된 정보를 반영하기 위해 하나 이상의 셀을 다시로드하고 있습니다.

+0

http://stackoverflow.com/questions/5112346/uitableview-scroll-to-bottom-on-reload – Sanniv

+0

http://stackoverflow.com/questions/16071503/how-to-tell-when- uitableview-has-completed-reloaddata – hariszaman

답변

0

여기 당신이 그것을 할 수있는 몇 가지 해키 방법은 다음과 같습니다

1) reloadData, 당신의 cellForRowAtIndexPath를 호출 할 때 : 기능을 위임 할 때마다 눈에 보이는 셀에 대해 한 번 호출되는 것입니다. 함수를 충분히 호출 한 후 액션을 계산하고 액션을 트리거 할 수 있습니다.

2) 다른 UITableViewDelegate 함수 중 일부가 결정적 방식으로 호출되기도합니다. 어쩌면 그 중 하나에서 새로 고침 기능을 호출 할 수 있습니다. 아마도 약간 지연 될 수 있습니다.

3) [tableView reloadData] 다음에 performSelector : withObject : afterDelay :를 사용하고 하드 코딩 된 지연을 사용할 수도 있습니다.

-3

이상적인 솔루션은 아니지만 UIView 애니메이션과 해당 완료 콜백을 사용하여이 문제를 해결했습니다. 이 위치를 UITableView 범주에 배치합니다. 예상대로 작동합니다.

- (void)reloadDataWithCompletion:(void (^)(BOOL finished))completion { 
    [UIView animateWithDuration:0.33 animations:^(){ 
    [self reloadData]; 
    }completion:completion]; 
} 
관련 문제