我只是在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控制器中)。還是一切都好。但我不知道如何設置ScrollView中顯示的這些子視圖的所有者(在IB中)。這些子視圖位於主視圖中的ScrollView中,因此我想將這些子視圖的所有者設置爲iPad/iPhone控制器。但是,作爲一個所有者只能是一個班級。你能告訴我如何設置所有者,如果我有兩個主控制器,我不知道哪一個將在運行時加載。謝謝。
編輯:我有另一個問題:我有ViewController_iPhone。它有一個View屬性,這個屬性被分配到ViewController_iPhone(.xib)主視圖中的「root」視圖。我可以將這個視圖屬性也分配給子視圖嗎?因爲如果我將ViewController_iPhone的視圖屬性分配給IB中的子視圖的「根」視圖,我得到了EXC_BAD_ACCESS錯誤。
如果您使用loadNibNamed加載nib,就像您已經做過那樣,那麼文件所有者沒有意義 –
因此,在IB中將哪個控制器設置爲文件所有者並不重要,因爲使用loadNibNamed方法的owner:self參數會將此所有者「重置」到代碼所在的控制器?不會有問題,因爲例如擁有者被設置爲iPhone控制器並且iPad控制器將會加載它嗎? – DanielH
雅這就是我說的......你正在從筆尖加載自定義視圖,你只訪問視圖對象。所以文件所有者不在遊戲中。請記住,不要將插座連接到文件所有者。將它連接到您的查看對象 –