는 현재 부가 기능은 모달를 볼 수 있는지 확인하고 거기에 "완료"(또는 "저장")과 "취소"버튼을 제공합니다. 사용자가 취소 버튼을 누르면 모달을 닫습니다. Done을 누르면 테이블 모델에 새 레코드를 저장 한 다음 루트보기에서 테이블을 다시로드 한 다음 반환합니다. 멋지게하려면 새로 추가 된 항목을 플래쉬 할 수 있습니다.
이것을 설정하는 가장 좋은 방법은 모달 컨트롤러가 '완료'프로토콜 메서드를 필요로하는 대리인을 구현하고 루트 컨트롤러가이를 구현하고 대리인으로 설정되도록하는 것입니다.
이렇게하면 사용자가 '완료'를 누를 때 루트 컨트롤러에 통지되어 모든 상황을 캡슐화 할 수 있습니다. 추가 세부 뷰에서 직접 이동하려는 경우 대리자 메서드는 새로 추가 된 레코드에 대해 '밀어 넣기'를 수행 할 수 있으며 모달에서 상세 뷰로의 멋진 전환을 얻을 수 있습니다.
MyListViewController.h
#import "MyAddViewController.h"
@interface MyListViewController : UITableViewController <MyAddViewControllerDelegate> {
}
- (IBAction)add:(id)sender;
@end
MyListViewController.m
// Action for bring up add view controller
- (IBAction)add:(id)sender {
MyAddViewController *addViewController = [[MyAddViewController alloc] initWithStyle:UITableViewStyleGrouped];
addViewController.delegate = self;
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:addViewController];
[self presentModalViewController:navigationController animated:YES];
[navigationController release];
[addViewController release];
}
// MyAddViewController's delegate method, dismiss the add view controller in here
- (void)addViewController:(MyAddViewController *)addViewController didAddData:(MyData *)data{
if (data) {
MyDetailViewController *detailViewController = [[MyDetailViewController alloc] initWithStyle:UITableViewStylePlain];
detailViewController.data = data;
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];
}
[self dismissModalViewControllerAnimated:YES];
}
: 라민의 응답을 바탕으로