UIViewサブクラスと対応するxibファイルを作成し、UILabelsとUIImageViewsをレイアウトしました。次に、このカスタムUIViewの複数のコピーをUIViewControllerに配置します。
これを行うと、Interface Builderで空白になり、アプリの読み込み時に表示されません。これを機能させるには、UIViewサブクラスにどのようなメソッドを実装する必要がありますか?
UIViewサブクラスと対応するxibファイルを作成し、UILabelsとUIImageViewsをレイアウトしました。次に、このカスタムUIViewの複数のコピーをUIViewControllerに配置します。
これを行うと、Interface Builderで空白になり、アプリの読み込み時に表示されません。これを機能させるには、UIViewサブクラスにどのようなメソッドを実装する必要がありますか?
これまでで最も簡単な方法は、ファイルの所有者をNSObjectに設定して、レイアウト要素を含む1つのビューを含むペン先を作成することです。
それで
NSArray *arr = [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:nil options:nil];
UIView *fv = [[arr objectAtIndex:0] retain];
// now you have the view, do something with it:
fv.center = CGPointMake(100,100);
[self.view addSubview:fv];
ファイルの所有者とは何もする必要はありません。ここではnilに設定されています。
これは、nibファイルを使用してテーブルビューセルを作成するのと似ています。これを行う方法を説明するページがあります。
カスタムビューのサブクラスにアウトレットを配置し、カスタムビューのnib(.xib)ファイルでサブクラスを「ファイルの所有者」としてUIViewController
設定する必要があります。UIViewController
次に、作成したアウトレットをトップレベルのビューオブジェクトに接続します(これもカスタムビューのnibファイルにあります)。
次に、View Controllerコードでカスタムビューをインスタンス化するたびに、次を呼び出します。
[[NSBundle mainBundle] loadNibNamed:<custom view nib name> owner:self options:nil];
追加したアウトレットは、カスタムビューの新しいインスタンスを指すように設定されます。
このアプローチの唯一の欠点は、Interface Builderでグラフィカルにではなく、プログラムでViewControllerにカスタムビューのインスタンスをレイアウトする必要があることです。
別のアプローチでは、サブクラスにプログラムでプットラベルと画像を作成し、UIView
他のサブクラスと同じようにインターフェイスビルダーに追加できますUIView
。
編集:残念ながら、Xcode 4.0では、この機能は削除されました。
Interface Builderでサブビューを構成したら、新しいグループを作成し(ライブラリウィンドウの下部にある歯車ボタンを使用)、リストビュー(つまり、レイアウトではない)からサブクラスオブジェクト(画像とラベルを含む)をドラッグできます。ビュー)ライブラリウィンドウに戻ります。
次に、ライブラリの組み込みオブジェクトの場合と同じように、ビューサブクラスの複数のインスタンスを任意のInterfaceBuilderビューまたはウィンドウにグラフィカルに追加できます。