Xibを使用してカスタムUIView
を作成しました。
さらに、ストーリーボードにUIViewController
があり、それにUIView
を追加して、そのクラスをカスタムUIView
に設定しました。
しかし、私がアプリを実行しているとき、ビューにはサブビューがありません。デバッグすると、すべてのサブビューがnullになります。
カスタムUIView
の.mには、次のinitメソッドが存在します。
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
}
return self;
}
何が欠けていますか?
ご存知のように、UIViewController
を使用すると、xibに接続するための-initWithNibName:bundle:
メソッドがあります。
だが...UIView
になると、-loadNibNamed:owner:options:
を使用してxibでロードする必要があります。 (xibのビューにカスタムクラスを指定するだけでは機能しません)
UIView
というCustomXIBView
サブクラスを作成しましたUIView
)CustomXIBView
という名前を付けました。CustomXIBView
のペン先に移動View
を選択します(左ツールバー)Show Identity Inspector
を選択します(右側のパネルの3番目のオプション)CustomXIBView
をView
のカスタムクラスとして指定しますCustomXIBView
のFile's Owner
を使用して何もしないでくださいCustomXIBView.h
で接続します//To load `CustomXIBView` from any `UIViewController` or other class:
//instead of the following commented code, do the uncommented code
//CustomXIBView *myCustomXIBViewObj = [CustomXIBView alloc] init];
//[myCustomXIBViewObj setFrame:CGRectMake(0,0,320,480)];
//Do this:
CustomXIBView *myCustomXIBViewObj =
[[[NSBundle mainBundle] loadNibNamed:@"someView"
owner:self
options:nil]
objectAtIndex:0];
[myCustomXIBViewObj setFrame:CGRect(0,
0,
myCustomXIBViewObj.frame.size.width,
myCustomXIBViewObj.frame.size.height)];
[self.view addSubview:myCustomXIBViewObj];