Child View Controller
컨트롤러 추가
addChildViewController: 를 사용해 컨트롤러 추가한다.
addSubView: 로 자식 컨트롤러의 루트뷰를 등록한다.
자식뷰의 사이즈(frame) 정보를 지정한다.
각종 제약등을 설정한다.
자식 컨트롤러의 didMoveToParentViewController: 호출해준다.
addChildViewController: 가 호출되면 자식 컨트롤러를 등록하고, 자식컨트롤러의 willMoveToParentViewController: 를 호출해준다. 자식컨트롤러가 부모 컨트롤러에 추가될때 원하는 초기화 코드를 넣으면되고, 추가 완료 후에는 부모 컨트롤러에서 didMoveToParentViewController: 를 호출해 주어야 한다.
* 오토레이아웃 환경의 경우 자식컨트롤러의 뷰 translateAutoresizingMaskIntoContraints = NO로 해준다.
-(void)showChldController
{
ChildViewController *childController =
[[ChildViewController alloc] initWithNibName:@"ChildViewController" bundle:nil];
// 오토레이아웃인 경우는
childController.view.translateAutoresizingMaskIntoConstraints = NO;;
[self addChildViewController:childController];
[self.view addSubView:childController.
// 프레임 설정( 오토레이아웃이 아닌경우)
childController.view.frame = CGRectMake(0,0,0,0); // 원하는 사이즈 설정
// 오토레이아웃 제약 설정
NSArray *constraints = childController.view.constraints;
[self.view addConstraints:constraints];
[childController didMoveToParentViewController:self];
}
컨트롤러 삭제
자식컨트롤러에 willMoveToParentViewController: 메쏘드를 호출한다.
제약 사항등을 제거 한다.
자식뷰를 제거한다.
removeFromParentViewController: 를 호출해 자식 컨트롤러를 제거한다.
(자식 스스로 제거할 수도 있다. 이경우는 removeFrom... 과 같은 메소드를 사용)
{
[childController willMoveToParentViewController:nil];
[childController.view removeFromSuperview];
[childController removeFromParentViewController];
}
자식 컨트롤러간 전환
-(void)changeViewController:(UIViewController*) oldVC
toViewController:(UIViewController*) newVC
{
[oldVC willMoveToParentViewController:nil];
[self addChildViewController:newVC];
[self transitionFromViewController:oldVC
toViewController: newVC
duration: 0.25
options: 0
animations:^{
newVC.view.frame = oldVC.view.frame;
oldVC.view.frame = CGRectMake(0,0,0,0);
}
completion:^(BOOL finished) {
[oldVC removeFromParentViewController];
[newVC didMoveToParentViewController];
}];
}
오토레이아웃의 경우 프레임이 아닌 제약으로 에니메이션 하기에 조금 다르다
-(void)changeViewController:(UIViewController*) oldVC
toViewController:(UIViewController*) newVC
{
[oldVC willMoveToParentViewController:nil];
[self addChildViewController:newVC];
self.view addConstraints:[newVC.view.constraints];
[self.view addSubView:newVC.view];
[newVC.view layoutIfNeeded];
[UIView animateWithDuration:
animations:^{
}
completion:^(BOOL finished) {
[oldVC.view removeFromSuperView];
[oldVC removeFromParentViewController];
[newVC didMoveToParentViewController];
}
}];
}
'프로그래밍 > iOS,macOS' 카테고리의 다른 글
폰의 사진, 앨범 가져오기 (0) | 2016.11.21 |
---|---|
NSString 문자열 관련/정규식/텍스트뷰 등... (0) | 2016.11.07 |
이것저것 Objective-C 관련 노트~ (0) | 2016.11.01 |
아이폰 시뮬레이터 로그 터미널로 보기 (0) | 2016.11.01 |
모달 뷰 (0) | 2016.10.28 |
오토레이아웃 이것저것 / Constraint / UITextView (0) | 2016.10.25 |
커스텀객체와 인터페이스빌더 (0) | 2016.10.23 |
스토리보드 / XIB (0) | 2016.10.22 |
싱글톤 (0) | 2016.10.19 |
코어 데이터 정리 (0) | 2016.10.18 |