0
을 전환 사이에 UIView를 공유하는 방법

이의이 다음은 ViewControllerB로 전환하기 전에 발생 ViewControllerA에서 UIButton의 탭에 그런 말을하자 ViewControllerB가 표시되면의 UIViewController의 (addChildUsingController와 :)

- (IBAction)levelSelectButton:(id)sender { 
    ViewControllerB* obj = [[ViewControllerB alloc] init]; 
    [self addChildViewController:obj]; 
    CGSize screenSize = [MainScreen screen]; 
    CGFloat screenWidth = screenSize.width; 
    CGFloat screenHeight = screenSize.height; 
    obj.view.frame = CGRectMake(0,0,screenWidth,screenHeight); 
    [obj.view addSubview:_banner]; 

    //[obj didMoveToParentViewController:self]; 
    [self runPushAnimationWithController:obj]; 
} 

, 내가 볼 수있는 내 _banner (개체)보기가 제 위치에 있지만, ViewControllerA으로 돌아 가면 더 이상 존재하지 않습니다.

이 예상되는 경우 내가 모르는 전에 나는 addChildViewController:/didMoveToParentViewController: 방법을 사용한 적이,하지만, 난 여전히 볼 수 _bannerViewControllerA로 돌아갈 수 있어야합니다.

보관해야합니까?

+0

버튼 클릭 이벤트에서 정확히 하시겠습니까? 보기 컨트롤러 내에서 다른보기 컨트롤러를 여는 것과 비슷합니까? 또는 사용자 정의 트랜지션 애니메이션으로 뷰 컨트롤러를 단순히 푸시하고 싶습니까? –

답변

0

뷰는 단일 슈퍼 뷰에만 속할 수 있습니다. Apple의 문서를 인용하십시오 :

보기에는 수퍼 뷰가 하나만있을 수 있습니다. 보기에 이미 수퍼보기가 있고보기가 수신기가 아닌 인 경우이 방법은 수퍼바이저를 새로운 수퍼 뷰로 만들기 전에 이전 수퍼 뷰 을 제거합니다.

그래서 새로 만든 부모보기 컨트롤러에보기를 추가하면 현재보기 컨트롤러의보기 계층 구조에서 제거됩니다.

나는 이런 종류의 일을하는 것이 좋습니다. 두 위치에서보기 사본을 작성하십시오. 대량의 데이터를 사용하는 경우 뷰 컨트롤러간에 데이터 (모델)를 공유하고 뷰 개체는 공유하지 않습니다.

뷰 컨트롤러간에 뷰를 이동하는 것이 완전히 설정된 경우 새 뷰 컨트롤러에 속성을 추가하고 다른 뷰 컨트롤러의 뷰 계층 구조를 조작하지 않고 해당 속성을 설정합니다. 또한 현재보기 컨트롤러로 돌아 가면 BACK보기를 전달해야합니다.

보기 컨트롤러의보기 계층 구조를 비공개로 처리해야합니다. 그렇게하지 않으면 캡슐화의 원칙을 위반하게됩니다.

+0

Duncan에게 감사드립니다. 덕분에 많은 도움이되었습니다. 두 컨트롤러 간의 부모 - 자식 관계 전체를 스크랩하도록 확신했습니다 (차례대로 다른 컨트롤러도 마찬가지입니다). –

+0

부모 - 자식 관계는 매우 유용 할 수 있지만 올바르게 사용하고 있다고 생각하지 않습니다. 컨테이너 뷰를보고 소스 코드를 삽입하십시오. –

+0

그게 내가하고 있다고 생각 했거든, 아니면 적어도 정확하게 적용 했어. Storyboards 또는 Xib 파일을 다루지 않기 때문에 모든 것을 프로그래밍 방식으로 처리하고 있습니다. 전반적으로 내가 원했던 것은 두 개의 컨트롤러 사이에 '_banner'가 컨테이너 뷰인 embed segue를 갖는 것이 었습니다 (기사 [link] https://spin.atomicobject.com/2015/07/21/ios-container-views/sums up) –