2013-03-10 2 views
3

그래서 UITableViewCell을 내 tableView에 삽입하고 있습니다.삽입 - 애니메이션 후에 만 ​​UITableViewCell을 다시로드

[searchTableView beginUpdates]; 
[searchTableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationTop]; 
[searchTableView endUpdates]; 

이 후 필자는 페이드 애니메이션으로 tableviewcell을 업데이트하는 비동기 요청을 실행하고 있습니다.

[someRequestWithCompletion:^(id data) { 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      [searchTableView beginUpdates]; 
      [searchTableView reloadRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationFade]; 
      [searchTableView endUpdates]; 
     }); 
}]; 

하지만이 요청은 삽입 애니메이션이 완료되기 전에 완료 될 수 있습니다. 삽입이 끝난 후 요청이 완료되면 아무런 문제가 없습니다. 이전에 끝나면 현재 삽입중인 동일한 셀에서 reloadRowsAtIndexPaths을 호출하면 셀이 즉시 표시되고 삽입 애니메이션이 사라지는 동안 강제로 다시로드됩니다.

셀이 완전히 삽입 된 후 다시로드 업데이트를 실행하는 방법은 무엇입니까? 이 일을하는 가장 좋은 방법은 무엇입니까? 질문이있는 경우

,

+1

왜 새로 삽입 한 행을 다시로드해야합니까? "someRequestWithCompletion"이 완료되면 행을 삽입하고 기다리지 않으시겠습니까? – rmaddy

+0

여기에서 나는 tableview를 다시로드 할 수 있다고 생각 했었습니다. ( –

+0

@KishorKundan 테이블보기 만 다시로드하면 전체 테이블, 특정 행 또는 특정 섹션을 다시로드 할 수 있습니다. 한 행만 다시로드하면 드문 경우가 아닙니다. 사람들은 셀을 다시로드한다고 말합니다. – rmaddy

답변

12

이 시도 내가 코멘트에 알려 주시기 바랍니다 ..

U는 애니메이션의 완료 후에 당신의 TableView를 다시로드 할 수 있습니다.

[CATransaction begin]; 
[searchTableView beginUpdates]; 

[CATransaction setCompletionBlock: ^{ 
     [searchTableView reloadData]; 
    }]; 

[searchTableView deleteRowsAtIndexPaths: [NSArray arrayWithObjects: indexPath, nil] 
         withRowAnimation: UITableViewRowAnimationAutomatic]; 

[searchTableView endUpdates]; 

[CATransaction commit]; 
+0

3 년 후이 답변이 내 엉덩이를 구해 줬습니다! 감사합니다. –

관련 문제