저는 iOS 앱으로 작업 중이며 iPhone 및 iPad 용으로 보편적으로 만들고 싶습니다. 이것은 아무 문제없이 수행하고 작동합니다 :유니버설 (iPhone/iPad) 앱용 iOS 컨트롤러
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
self.viewController_iPhone = [[ViewController_iPhone alloc] initWithNibName:@"ViewController_iPhone" bundle:nil];
} else {
self.viewController_iPad = [[ViewController_iPad alloc] initWithNibName:@"ViewController_iPad" bundle:nil];
}
if (self.viewController_iPhone == nil)
self.window.rootViewController = self.viewController_iPad;
else
self.window.rootViewController = self.viewController_iPhone;
각 컨트롤러 (ViewController_iPad.xib, ViewController_iPhone.xib)에 대한 전망이있다. 내보기에 어떤보기가로드되었는지는 중요하지 않습니다. 뷰에는 하위 뷰 (UIScrolView)가 추가되었습니다. 이 ScrollView에는 xib에서 두 가지 뷰가 있습니다.
NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"SubView1" owner:self options:nil];
UIView *view = [nibContents objectAtIndex:0];
view.frame = CGRectMake(2, 0, scrollView.frame.size.width - 2, scrollView.frame.size.height);
[scrollView addSubview:view];
nibContents = [[NSBundle mainBundle] loadNibNamed:@"SubView2" owner:self options:nil];
view = [nibContents objectAtIndex:0];
view.frame = CGRectMake(scrollView.frame.size.width + 2 , 0, scrollView.frame.size.width - 4, scrollView.frame.size.height);
[scrollView addSubview:view];
(이 코드는 iPad/iPhone 컨트롤러에 있음) 아직도 모든 것이 OK입니다. 그러나 ScrollView에 표시된 하위 뷰의 소유자 (IB)를 설정하는 방법을 모르겠습니다. 이러한 하위보기는 기본보기에있는 ScrollView에 있으므로이 하위보기의 소유자를 iPad/iPhone 컨트롤러로 설정하려고합니다. 하지만 소유자는 단 하나의 클래스가 될 수 있습니다. 두 개의 메인 컨트롤러가 있고 런타임에 어떤 컨트롤러가로드 될지 알 수없는 경우 소유자를 설정하는 방법을 알려주시겠습니까? 고맙습니다.
편집 : 다른 질문이 있습니다. ViewController_iPhone 있습니다. View 속성이 있으며이 속성은 ViewController_iPhone (.xib)의 기본보기에있는 "루트"보기에 지정됩니다. 이 뷰 속성을 하위 뷰 뷰에도 지정할 수 있습니까? ViewController_iPhone의 뷰 속성을 IB의 서브 뷰의 "루트"뷰에 할당하면 EXC_BAD_ACCESS 오류가 발생합니다.
이미로드 한 것처럼 펜촉을로드하는 경우 파일 소유자에게 아무런 의미가 없습니다. –
owner : self 매개 변수로 loadNibNamed 메소드를 사용하므로 어떤 컨트롤러를 IB에서 파일 소유자로 설정해도 문제가되지 않습니다. 이 코드가있는 컨트롤러에이 소유자를 "재설정"하시겠습니까? 예를 들어 소유자가 iPhone 컨트롤러로 설정되어 있고 iPad 컨트롤러가이를로드하기 때문에 문제가되지 않습니까? – DanielH
그래, 내가 말한 것 ... 당신이 펜촉에서 사용자 정의보기를로드하는 중, 당신은보기 개체에만 액세스하고 있습니다. 따라서 파일 소유자는 게임에 참여하지 않습니다. 아웃렛을 파일 소유자에게 연결하지 마십시오. 뷰 객체에 연결하십시오. –