addChildViewController를 호출 한 후 addSubview를 호출해야합니까?
iOS5
.NET과 같은 새로운 메서드를 사용하여 컨테이너 뷰 컨트롤러를 만들려고합니다 addChildViewController
.
전화 addSubview
후 전화 addChildViewController
해야하나요?
전화 removeFromSuperview
하기 전에 전화 removeChildViewController
해야하나요?
나는 Apple 문서에서 이것에 대해 아무것도 보지 못합니다. 어떻게 생각해?
짧은 대답 : "예, 그렇습니다." 뷰 계층과 뷰 컨트롤러 계층은 여전히 독립적입니다. Containment API를 사용하면 다른 컨트롤러의 뷰가 부모 컨트롤러의 뷰 내에 깔끔하고 일관된 방식으로 표시 될 수 있습니다.
여기 Apple의 문서 에서 약간을 찾을 수 있습니다 . 이것은 "컨테이너보기 컨트롤러가 다른보기 컨트롤러의 내용을 정렬"섹션의 관련 구절입니다.
컨테이너는 다른 뷰 컨트롤러와 마찬가지로 뷰 계층을 관리합니다. 컨테이너는 또한 하위 뷰를 뷰 계층 구조에 추가 할 수 있습니다. 컨테이너는 이러한 뷰가 추가되는시기와 컨테이너의 뷰 계층 구조에 맞게 크기를 조정하는 방법을 결정하지만 그렇지 않은 경우 하위 뷰 컨트롤러가 뷰와 해당 하위 뷰에 대한 책임이 있습니다.
액세스 권한이 있다면 "UIViewController Containment 구현"이라는 제목의 WWDC 2011 비디오를 확인하는 것이 좋습니다 ( Apple Developer Video Archive에서 다운로드 ).
1) addChildViewController를 호출 한 후 addSubview를 호출해야합니까?
예
2) removeChildViewController를 호출하기 전에 removeFromSuperview를 호출해야합니까?
좀 빠지는
당신은 호출해야합니다 removeFromParentViewController:
대신에 removeChildViewController:
당신은 또한 호출해야willMoveToParentViewController:
추가 / 제거에 대해서는이 훌륭한 카테고리를 참조 할 수 있습니다.
- (void)containerAddChildViewController:(UIViewController *)childViewController {
[self addChildViewController:childViewController];
[self.view addSubview:childViewController.view];
[childViewController didMoveToParentViewController:self];
}
- (void)containerRemoveChildViewController:(UIViewController *)childViewController {
[childViewController willMoveToParentViewController:nil];
[childViewController.view removeFromSuperview];
[childViewController removeFromParentViewController];
}
Peter의 답변에 추가 : addChildViewController
이전 에 호출 한 한 가지 이유 addSubview
는 언제 addSubview
호출 viewDidLoad
되면 자식이 호출되고 어떤 경우에는 그 시점에서 부모-자식 계층을 올바르게 설정하기를 원한다는 것입니다. 그렇지 않으면 자식의 viewDidLoad 동안 parentViewController 속성이 nil이됩니다.
아래는 Apple 문서에서 제공하는 예입니다.
- (void) displayContentController: (UIViewController*) content {
[self addChildViewController:content];
content.view.frame = [self frameForContentController];
[self.view addSubview:self.currentClientView];
[content didMoveToParentViewController:self];
}
https://developer.apple.com/library/archive/featuredarticles/ViewControllerPGforiPhoneOS/ImplementingaContainerViewController.html에 제공된 자세한 설명을 살펴볼 수도 있습니다.
이것은 자식 및 부모 뷰 컨트롤러 관계에 대한 아이디어와 함께 작업하는 방법을 제공합니다.
'program tip' 카테고리의 다른 글
Ruby on Rails에서 has_many 항목 수를 확인합니다. (0) | 2020.12.11 |
---|---|
ajax 게시물에 대해 수동으로 MVC 3 클라이언트 측 유효성 검사 호출 (0) | 2020.12.11 |
오늘 시간을 자정으로 설정하는 방법은 무엇입니까? (0) | 2020.12.11 |
AngularJS-조건부로 항목을 반환하기 위해 ng-repeat로 사용자 지정 필터를 구성하는 방법 (0) | 2020.12.11 |
Angular, 콘텐츠 유형이 $ http로 전송되지 않음 (0) | 2020.12.11 |