2010-04-18 4 views
3

저는 iPhone 개발에 익숙하지 않아이 문제를 해결하기 위해 깔끔한 방법을 찾는데 어려움을 겪었습니다.UINavigationController 계층 내에서 UITableView를 새로 고치는 가장 좋은 방법은 무엇입니까

레코드 데이터 요약이 탐색 컨트롤러의 테이블에 표시되는 사용자 인터페이스가 있습니다. 사용자가 행의 액세서리 버튼을 클릭하면 사용자가 해당 레코드의 데이터를 편집 할 수있는보기를 표시하는 새보기가 탐색 컨트롤러로 푸시됩니다. 완료되면 탐색 뷰의 스택에서 편집 뷰가 팝업되고 사용자가 테이블 뷰로 돌아갑니다.

내 문제는 사용자가 테이블보기로 돌아갈 때 레코드가 편집되기 전에 테이블에 여전히 데이터의 상태가 표시된다는 것입니다. 따라서 테이블 데이터를 다시로드하여 변경 사항을 표시해야합니다.

통화가 표시된 레코드 만 업데이트하므로 테이블 데이터가 표시되기 전에 다시로드 할 수없는 것 같습니다. 테이블을 표시 한 후에 다시로드하면 이전 데이터가 사용자의 눈앞에서 변경되므로 결과가 너무 만족스럽지 않습니다.

이것은 아이폰 앱에서하고 싶은 꽤 일반적인 것 같습니다.

누구나 최선의 방법을 제안 할 수 있습니까? 나는 뭔가를 놓친 것 같은 기분이야.

건배 - 스티브.

답변

13

나는 다음과 같은 방법으로이를 구현 것 : 클릭 된 셀의

  1. 저장 indexPath.

  2. 구현 -[UIViewController viewWillAppear:] UITableView를 포함하는보기 컨트롤러의 메서드입니다.

    -[UITableView reloadRowsAtIndexPaths:withRowAnimation:]

16

표준 접근 방식은 처음에는 혼전의 많은처럼 들릴지 모르지만, 상황의 많은 유용한 패턴 : 저장 indexPath가 nil이 아닌 경우, 지정된 세포를 다시로드합니다.

-(void)editDone { 
    [self.tableView reloadData]; 
} 

이처럼 편집 컨트롤러에 속성을 추가 : 설정

@property (assign) id delegate; 

대리자 당신의 액세서리를 클릭 할 때 : 같이 당신의 tableview 클래스에서

는 방법을 만들

editController.delegate = self; 

편집이 완료되면 방법을 다음과 같이 호출하십시오 :

[delegate performSelector:@selector(editDone) withObject:nil]; 

당신은 당신의 편집 구성 요소의 취소 또는 등 모달 편집 컨트롤러의 치부 당신이 좋아하는 경우는, 프로토콜에 모든 것을 넣어 더 고급 간주을 수행하기 위해 처리하는 유사한 방법을 만들 수 있습니다.

관련 문제