新しいXcode4の下でユニバーサルプロジェクトを開始しました。私のアプリケーションはiPhoneとiPadの両方のデバイスで動作しますが、iPad用にうまく設計されていません。 MainWindowに2つの.xibファイルがあります。MainWindow.xib(iPhoneデバイス)とMainWindow-Ipad.xib(iPadデバイス)です。しかし、MainViewの.xibファイルは1つだけです:MainView.xib。
だから私はiPadデバイス用の特定の.xibファイルを作成しようとしています:
新しいファイル>ユーザーインターフェイス>表示->次へ->デバイスファミリ:iPad-> MainView-iPad.xib->保存
そしてもちろん、接続されているもの、参照するアウトレット、クラスへのリンクはありません。
新しいMainView-iPad.xibの各サムネイルをチェックして、それをMainViewControllerクラスにリンクして成功させません!?
MainViewControllerクラスにどこに、またはどのようにリンクできますか?前もって感謝します。
正しい答えはuser763308によって与えられました:
.xibをXcode4のクラスにリンクするには:
次に、次のことも実行する必要がありました。
新しいUIファイルではなく、新しいUIViewControllerサブクラスを作成します。これにより、.xibとクラスファイル(.mおよび.h)が作成されます。テンプレートはCocoa Touchの下にあります。
既存のビューコントローラにリンクすることは、おそらくお勧めできません。 MVC(Model-View-Controller)設計パターンに従っている場合は、データクラスとビューコントローラーが分離されています。可能であれば、MainViewControllerクラスから、それが所有するデータクラスに移動します。次に、iPad用の別のビューコントローラーを作成し、作成したデータクラスのインスタンスをそれで所有します。
ユニバーサルアプリの場合、.xibとコントローラークラスの比率が2:1であることは必ずしも正しくありません。これが私が従うパターンです:
MainViewControllerクラスがあります。 MainView-iPhone.xibとMainView-iPad.xibの2つの.xibファイルがあります。これらのファイルはどちらも、「ファイルの所有者」アウトレットがMainViewControllerに設定されています。ここで、ビューコントローラーが実際に正しいインターフェイスをロードし、アプリが実行されているデバイスに応じてすべての適切なアウトレットを接続するように、次のようにします。
MainViewController* controller = nil;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
controller = [[MainViewController alloc]initWithNibName:@"MainView-iPad" bundle:[NSBundle mainBundle]];
} else {
controller = [[MainViewController alloc] initWithNibName:@"MainView-iPhone" bundle:[NSBundle mainBundle]];
}
/* Present the controller */
さて、これは、さまざまなデバイスで実行するときにたどる必要のある個別のコードパスが多すぎない場合にのみ良い方法であるとも言えます。 iPadとiPhoneで実行するときのコントローラーの動作がより特殊化されている場合は、MainViewControllerの一般的な動作を抽象化してから、MainViewController_iPhoneとMainViewController_iPadの2つのサブクラスを記述することをお勧めします。次に、各サブクラスは適切な.xibファイルをロードし、すべての詳細を内部的に処理します。この場合、上記のコードは次のようになります。
MainViewController* controller = nil;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
controller = [[MainViewController_iPad alloc] init];
} else {
controller = [[MainViewController_iPhone alloc] init];
}
/* Present the controller */
.xibをクラスファイルにリンクするには、次の手順を実行します。-
1)右側面図に移動します。 2)3番目のボタンをクリックすると、カスタムクラスについて尋ねる行が表示されます。リンクするクラスファイルの名前を書きます。
参照アウトレットを作成するための:-
1)uはiPhone .xibからすべてのアウトレットをコピーしてここに貼り付け、すべてのアウトレットをファイル所有者にドラッグして接続できます。