programing

UIViewController의 뷰를 하위 뷰로 추가하는 방법

lastmoon 2023. 8. 5. 10:53
반응형

UIViewController의 뷰를 하위 뷰로 추가하는 방법

구글 사용자들에게 이 Q-A는 이제 6년이 지났습니다!

아래의 Micky와 다른 사람들이 언급했듯이, 이것은 이제 iOS에서 Containers를 사용하여 일상적으로 수행됩니다.


많은 하위 보기를 제어하는 보기 컨트롤러가 있습니다.단추 중 하나를 클릭하면 다른 보기 컨트롤러를 초기화하고 해당 보기를 이 보기의 하위 보기로 표시합니다.그러나 하위 보기는 하위 보기 프레임의 범위를 초과하며 실제로 전체 화면을 채웁니다.

뭐가 잘못됐어요?문제는 UIViewController의 보기에 프레임(0,0,320,460)이 있어 전체 화면을 채우는 것입니다(단, 하위 보기 프레임 범위 내에서 터치할 때만 의 터치 이벤트를 수신함).하위 뷰에 맞게 프레임 크기를 조정하려면 어떻게 해야 합니까?

즉, 뷰 컨트롤러의 뷰를 다른 뷰 컨트롤러의 뷰에 하위 뷰로 추가하는 데 도움이 필요합니다.

감사합니다!

iOS 5부터, Apple은 특히 addChildViewController같은 방법을 통해 UIViewController를 다른 UIViewController에 추가할 목적으로 사용자 지정 컨테이너를 만들 수 있으므로 실제로 UIViewController를 중첩할 수 있습니다.

EDIT: 링크 파손 방지를 위한 in-place 요약 포함

인용구:

iOS는 앱을 구성하는 데 도움이 되는 많은 표준 컨테이너를 제공합니다. 그러나 시스템 컨테이너에서 제공하는 것과 일치하지 않는 사용자 정의 워크플로를 생성해야 하는 경우도 있습니다. 아마도 당신의 비전에 따르면, 당신의 앱은 특별한 탐색 제스처나 애니메이션 전환이 있는 하위컨트롤러의 특정한 조직이 필요할 것입니다. 이를 위해 사용자 지정 컨테이너를 구현합니다. 자세한 내용은...

...그리고:

컨테이너를 설계할 때 컨테이너, 상위다른컨트롤러, 하위 간에 명시적인 상위-하위 관계를 만듭니다. - 추가 정보

샘플(Apple 문서 제공) 컨테이너의 보기 계층에 다른 보기 컨트롤러의 보기 추가

- (void) displayContentController: (UIViewController*) content
{
   [self addChildViewController:content];                 
   content.view.frame = [self frameForContentController]; 
   [self.view addSubview:self.currentClientView];
   [content didMoveToParentViewController:self];          
}

이 사람들 덕분에 저는 그것을 했습니다. http://highoncoding.com/Articles/848_Creating_iPad_Dashboard_Using_UIViewController_Containment.aspx

UIView를 추가하고 헤더에 연결합니다.

@property (weak, nonatomic) IBOutlet UIView *addViewToAddPlot;

In - (void)viewDidLoad에서 다음 작업을 수행합니다.

ViewControllerToAdd *nonSystemsController = [[ViewControllerToAdd alloc] initWithNibName:@"ViewControllerToAdd" bundle:nil];
    nonSystemsController.view.frame = self.addViewToAddPlot.bounds;
    [self.addViewToAddPlot addSubview:nonSystemsController.view];
    [self addChildViewController:nonSystemsController];
    [nonSystemsController didMoveToParentViewController:self];

즐거운 시간 되세요.

이 대답은 이전 버전의 iOS에서는 정확하지만 이제는 쓸모가 없습니다.당신은 미키 던컨의 답변을 사용해야 하며, 이 답변은 맞춤형 컨테이너를 포함합니다.

이지마는러! 의의도의 UIViewController전체 화면을 구동하는 것입니다.이것은 이것에 적합하지 않고, 당신이 필요로 하는 것을 전혀 추가하지 않습니다.

사용자 정의 보기를 소유하는 개체만 있으면 됩니다.다음의 하위 클래스를 사용합니다.UIView창 계층에 추가할 수 있으며 메모리 관리가 완전히 자동화됩니다.

NIB의 지정 인 "NIB"를 합니다.UIView 추가contentView이 사용자 지정 하위 클래스의 출구를 지정하고 닙 내의 보기를 가리킵니다.사용자 지정 하위 클래스에서 다음과 같은 작업을 수행합니다.

- (id)initWithFrame: (CGRect)inFrame;
{
    if ( (self = [super initWithFrame: inFrame]) ) {
        [[NSBundle mainBundle] loadNibNamed: @"NibNameHere"
                                      owner: self
                                    options: nil];
        contentView.size = inFrame.size;
        // do extra loading here
        [self addSubview: contentView];
    }
    return self;
}

- (void)dealloc;
{
    self.contentView = nil;
    // additional release here
    [super dealloc];
}

(여기서당사는것은하용이신여것▁(은)를 사용하고 합니다.initWithFrame:하위 뷰를 구성합니다.)

다음은 컨트롤러 보기를 다른 보기의 하위 보기로 추가하는 적절한 방법입니다.

    [self addChildViewController:viewControllerToAdd];
    [self.view addSubview:viewControllerToAdd.view];
    [viewControllerToAdd didMoveToParentViewController:self];

원하는 경우 이를 코드에 스니펫으로 복사할 수 있습니다.SO는 코드 대체 포맷을 이해하지 못하는 것처럼 보이지만 Xcode에서는 정상적으로 표시됩니다.

    [self addChildViewController:<#viewControllerToAdd#>];
    [self.view addSubview:<#viewControllerToAdd#>.view];
    [<#viewControllerToAdd#> didMoveToParentViewController:self];

willMove는 addChild와 함께 자동으로 호출됩니다.@iOSergey 감사합니다.

사용자 지정 컨테이너가 addChildViewController: 메서드를 호출하면 willMoveToParentViewController: 메서드를 추가하기 전에 뷰 컨트롤러의 메서드를 자동으로 호출합니다.

사용:

[self.view addSubview:obj.view];

의 프레임 viewcontroller.view.frame하위 보기에 추가합니다.[viewcontrollerparent.view addSubview:viewcontroller.view]

해당 프레임에 맞도록 경계 속성을 설정해야 합니다.프레임의 수퍼뷰 특성 및 경계는 뷰 자체 좌표계의 프레임을 제한합니다.

UIViewController를 하위 뷰로 표시하는 SDK와 동일한 것에 대해 PopupController를 사용할 수 있습니다. PopupController를 선택할 수 있습니다.

여기 동일한 샘플 코드가 있습니다.

popup = PopupController
        .create(self.navigationController!)
        .customize(
            [
                .layout(.center),
                .animation(.fadeIn),
                .backgroundStyle(.blackFilter(alpha: 0.8)),
                .dismissWhenTaps(true),
                .scrollable(true)
            ]
        )
        .didShowHandler { popup in
        }
        .didCloseHandler { popup in
    }
    let container = MTMPlayerAndCardSelectionVC.instance()
    container.closeHandler = {() in
        self.popup.dismiss()
    }

    popup.show(container)

언급URL : https://stackoverflow.com/questions/1486832/how-to-add-an-uiviewcontrollers-view-as-subview

반응형