delegate로 부모뷰컨트롤러의 함수를 호출할 수 있지만 배보다 배꼽이 더 큼
아래처럼 notificationcenter를 통하면 엄청 간단함
주로 리스트에서 글쓰기 뷰컨트롤러를 호출 후 되돌아 왔을때 리스트를 갱신해야 할때 사용하면 유용함.
// * 부모뷰 컨트롤러임 *
BOOL bDataCreate; // 데이터를 갱신해야 하는지 확인용으로 bool형 변수 하나 선언
- (void)viewDidLoad {
bDataCreate = NO; // NO로 초기화(안해도 되지만)
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveNotiDataCreate:) name:@"NotiDataCreate" object:nil]; // noti 등록
}
- (void)viewWillAppear:(BOOL)animated {
if (bDataCreate == YES) { // 되돌아왔을때 YES면 데이터 갱신 후 다시 NO로 초기화
// 데이터 갱신 (ex: data select add .... [tableview reload] )
bDataCreate = NO;
}
}
- (void)dealloc { // 뷰 날라갈땐 등록한 noti 제거
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)receiveNotiDataCreate:(NSNotification *) notification {
bDataCreate = YES; // 자식뷰컨트롤러로 부터 변경하라는 노티가 왔다면 YES로 변경
}
// * 자식뷰컨트롤러 *
// 자식 viewcontroller에서 데이터가 추가되었을 경우 호출만 해주면 됨
[[NSNotificationCenter defaultCenter] postNotificationName:@"NotiDataCreate" object:self];
참고삼아 delegate로 호출하는 방법도 남겨둠
간단구현법!
1. 자식창(아래 포스트에선 SecondViewControllerDelegate)에서 프로토콜 및 딜리게이트 설정
1-1. 헤더
@protocol SecondViewControllerDelegate;
@interface SecondViewController : UIViewController {
UITextField *textField;
id<SecondViewControllerDelegate> delegate;
}
@property (nonatomic,assign) id<SecondViewControllerDelegate> delegate;
@end
@protocol SecondViewControllerDelegate<NSObject>;
@required
-(void) secondViewControllerInputDidEnd:(NSString *)text; <-- 요걸 마음대로 정의
@end
1-2. m
@synthesize delegate;
[self.delegate secondViewControllerInputDidEnd:textField.text];
2.부모창(아래 포스트에선 FirstViewController)
2-1. h
자식창에서 정의된 딜리게이트를 헤어에 포함 및 해당 헤더 임포트
UIViewController<SecondViewControllerDelegate>
2-2. m
자식 딜리게이트에 셀프 할당
secondViewController.delegate = self;
자식 호출(호출 방법은 [self presentModalViewController:vc animated:YES]; 등 많음)
실질적으로 자식창에서 호출할 부모창 구현
-(void)secondViewControllerInputDidEnd:(NSString *)text{
NSLog(@"delegate");
delegateLabel.text = text;
}
'모바일 & 앱' 카테고리의 다른 글
checkbox readonly 속성 부여하기 (0) | 2016.10.19 |
---|---|
cocodpod 사용법 : 터미널 사용으로 헷갈리는 pod 정리 설치방법 (0) | 2016.09.27 |
xcode 8 : Choose an initial device view 퉤퉤 (0) | 2016.09.21 |
아이폰 무료게임, 안드로이드 무료게임 : 언제나 여름방학 공략 (0) | 2016.09.16 |
아이폰 iOS 10 업데이트 후 가장 좋은 점 (0) | 2016.09.14 |