program tip

addChildViewController를 호출 한 후 addSubview를 호출해야합니까?

radiobox 2020. 12. 11. 08:00
반응형

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:

추가 / 제거에 대해서는이 훌륭한 카테고리를 참조 할 수 있습니다.

UIViewController + 컨테이너

- (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];

}

developer.apple.com의 공식 리소스


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에 제공된 자세한 설명을 살펴볼 수도 있습니다.

이것은 자식 및 부모 뷰 컨트롤러 관계에 대한 아이디어와 함께 작업하는 방법을 제공합니다.

참고 URL : https://stackoverflow.com/questions/10143903/do-i-have-to-call-addsubview-after-calling-addchildviewcontroller

반응형