web-dev-qa-db-ja.com

Xcode 4で.xibファイルをクラスファイルにリンクする方法

新しい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クラスにどこに、またはどのようにリンクできますか?前もって感謝します。

29
user763308

正しい答えはuser763308によって与えられました:

.xibをXcode4のクラスにリンクするには:

  1. .xibを開きます。
  2. プレースホルダー:ファイルの所有者を選択します。
  3. 右側のパネルの3番目のサムネイル:[IDインスペクタ]で、[カスタムクラス]フィールドを編集し、クラスの名前を入力します。

次に、次のことも実行する必要がありました。

  1. オブジェクトの下のルートビューをクリックします。
  2. 最後のタブ「接続の表示」をクリックします。
  3. 「新しい参照アウトレット」を「ファイルの所有者」にドラッグし、「表示」を選択します。
91
Viktor Nordling

新しいUIファイルではなく、新しいUIViewControllerサブクラスを作成します。これにより、.xibとクラスファイル(.mおよび.h)が作成されます。テンプレートはCocoa Touchの下にあります。

既存のビューコントローラにリンクすることは、おそらくお勧めできません。 MVC(Model-View-Controller)設計パターンに従っている場合は、データクラスとビューコントローラーが分離されています。可能であれば、MainViewControllerクラスから、それが所有するデータクラスに移動します。次に、iPad用の別のビューコントローラーを作成し、作成したデータクラスのインスタンスをそれで所有します。

4
Tom Hamming

ユニバーサルアプリの場合、.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 */
1
Matt Wilding

.xibをクラスファイルにリンクするには、次の手順を実行します。-

1)右側面図に移動します。 2)3番目のボタンをクリックすると、カスタムクラスについて尋ねる行が表示されます。リンクするクラスファイルの名前を書きます。

参照アウトレットを作成するための:-

1)uはiPhone .xibからすべてのアウトレットをコピーしてここに貼り付け、すべてのアウトレットをファイル所有者にドラッグして接続できます。

1
Kasaname