0

私はiOSアプリケーションを開発しています。私はコントローラーを持っています:iPhonePopUpController、このコントローラーにはこの画像のようなxibがあります:ここに画像の説明を入力してください

私の質問は、このコントローラーに他のxibを追加して、必要なときにロードすることはできますか、それとも2番目のxibをロードするために2番目のコントローラーを作成する必要がありますか?ここに画像の説明を入力してください

4

1 に答える 1

0

次を使用して、XIBから何でもロードできます。

[[NSBundle mainBundle] loadNibNamed:@"YourOtherXIB.xib" owner:someObjectThatWillTakeThePlaceOfFilesOwner options:0]

この行は、XIBYourOtherXIB.xibにあるオブジェクトのインスタンスを作成することによって名前が付けられたXIBをアーカイブ解除し、XIBで定義したすべてのアウトレットとアクションを接続して、最上位オブジェクトのリストを返します。


ファイルの所有者がであるXIBを作成する場合、通常は次のようなコードを使用してUIViewController初期化します。UIViewController

UIViewController* vc = [[[UIViewController alloc] initWithNibName:nibName bundle:bundle] autorelease];

このコードが基本的に内部で行うことは、を格納し、nibName内部bundleプロパティで提供することです。ビューをロードする必要がある場合(特に、初めて画面に表示する必要がある場合)、次のようなものを使用してXIBからビューをロードします。上で引用した行:

[bundle loadNibNamed:nibName owner:self options:0];

XIBのビューを'sのIBOutlet(この場合はview引数として渡されます。つまりそれ自体)に接続すると、のプロパティには、アーカイブされたばかりのビューが入力されます。 XIB。そして、それがXIBファイルからビューをロードする方法です。File's OwnerselfUIViewControllerviewUIViewControllerUIViewController

ただし、もちろん、独自のクラスでも同じことができ、ファイルの所有者がである必要はありませんUIViewController。ファイルの所有者をニーズに合ったクラスにし、このクラスからカスタムIBOutletを公開して、XIB内のオブジェクトに接続するだけです。

  • たとえば、MyCustomClassを宣言するクラスを持つことができますIBOutlet UIView* myOtherView;File's OwnerXIBで自分のクラスをクラスに定義してから、アウトレットをビューにMyCustomClassバインドしてXIBからロードします。myOtherView次に、コードで、のインスタンスを作成し、このインスタンスをパラメーターとして渡しMyCustomClassて上記のメソッドを使用しますloadNibNamed:owner:options:MyCustomClassowner
  • またはUIViewController、プライマリXIBをロードしたものを再利用して、セカンダリXIBから他のビューをロードすることもできIBOutlet UIView* otherViewますUIViewController。サブクラスにを追加するだけです。最初のXIBでは、viewIBOutletをプライマリビューに接続しますが、otherViewIBOutletは接続しないままにします。2番目のXIBでは、otherViewIBOutletを他のビューに接続しますが、IBOutletは接続しないままにしますviewUIViewController最初のXIBをロードすると、viewプロパティはXIBからロードされたビューに設定されます。次にotherView、後で他のXIBから遅延読み込みを行う場合は、nib名および所有者としてloadNibNamed:owner:optionsを呼び出します。はアーカイブ解除され、プロパティはそのロードされたビューで埋められます。OtherXIB.xibselfOtherXIBotherView
于 2012-09-14T11:45:44.840 に答える