UIViewController의 뷰를 서브 뷰로 추가하는 방법
Google 직원을 위해이 QA는 이제 6 년이 지났습니다 .
아래 Micky와 다른 사람들이 언급했듯이, 이제 iOS의 컨테이너 를 사용하여 매일 수행 됩니다.
많은 하위 뷰를 제어하는 ViewController가 있습니다. 버튼 중 하나를 클릭하면 다른 뷰 컨트롤러를 초기화 하고이 뷰의 하위 뷰로 뷰를 표시합니다. 그러나 subview는 경계를 초과하고 실제로 전체 화면을 채 선택합니다.
무엇이 잘못입니까? 문제는 UIViewController의 뷰에 프레임 (0,0,320,460)이있어 전체 화면을 채운다 고 가정합니다 (하위 뷰 프레임 경계 내에서 터치 할 때만 터치 이벤트를 수신하지만). 서브 뷰에 맞게 프레임 크기를 어떻게 조정할 수 있습니까?
요컨대, 뷰 컨트롤러의 뷰를 다른 뷰 컨트롤러의 뷰에 하위 뷰로 추가하는 데 도움이됩니다.
감사합니다!
에서 iOS 5 부터 애플은 특히 addChildViewController 와 같은 메서드를 통해 의 UIViewController 를 다른 있는 UIViewController 에 추가 할 목적으로 user-지정 컨테이너 를 만들 수 있으므로 실제로 있는 UIViewController 를 중첩 할 수 있습니다.
편집 : 링크를 피하기 위해 내부 요약 포함
나는 인용한다 :
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에 적합하지만 이제는 사용되지 않습니다. Micky Duncan의 답변을 대답합니다.
이러지마! 의 의도 UIViewController
는 전체 화면을 구동하는 것입니다. 이것에 필요한 것을 추가하지 않습니다.
사용자 정의보기를 소유하는 개체 만 있으면됩니다. UIView
자신 의 하위 클래스를 사용하기 만하면 창 계층 구조에 추가 할 수있는 메모리 관리가 자동으로 수행됩니다.
하위보기 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:
하위 뷰를 구성하는 데 사용 가정합니다 .)
이 모든 답변이 약간의 불완전 생각하는 viewController의 뷰를 다른 viewController의 뷰의 하위로 추가하는 적절한 방법은 다음과 가능합니다.
[self addChildViewController:viewControllerToAdd];
[self.view addSubview:viewControllerToAdd.view];
[viewControllerToAdd didMoveToParentViewController:self];
원하는 경우에 코드에 스 니펫으로 복사 할 수 있습니다. 그래서 코드 대체 형식을 이해하지 못하는 것 같지만 Xcode에서 깨끗하게 표시됩니다.
[self addChildViewController:<#viewControllerToAdd#>];
[self.view addSubview:<#viewControllerToAdd#>.view];
[<#viewControllerToAdd#> didMoveToParentViewController:self];
willMove 는 addChild와 함께 자동으로 호출됩니다. 감사합니다 @iOSSergey
사용자 지정 컨테이너가 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
'ProgramingTip' 카테고리의 다른 글
Firefox 기록으로 돌아 가면 JavaScript가 실행되지 않습니다. (0) | 2020.10.18 |
---|---|
gitlab 개인 저장소에서 npm 모듈 설치 (0) | 2020.10.18 |
CSS3 box-shadow : 인세 트는 한쪽 또는 양면 만 할 수 있습니까? (0) | 2020.10.18 |
두 개의 PHP Doctrine 2 ArrayCollection ()을 병합하는 방법 (0) | 2020.10.18 |
Windows에서 Npm을 때 때 SSL 인증서 오류를 수정하는 방법은 무엇입니까? (0) | 2020.10.18 |