複数のペン先で使用したいカスタムウィジェットを作成しています。そこで、新しいビューペン先Screen3を作成し、いくつかのボタンを追加して、UIAwesomeSauceウィジェットが必要になりました。
ビューを追加してからクラスIDを変更しただけでは、UIAwesomeSauceペン先からサブ要素を取得できません。ライブラリに移動してクラスに切り替えても同じです。UIViewControllerだけが「Loadfromnib」のフィールドを持っているようです。これは美しいでしょう。
コードからUIAwesomeSauceペン先をロードし、トップレベルのオブジェクトを取得して、手動で配置できることはわかっています。ただし、IBのポイントは、コードに物を配置する必要がないことです。UIAwesomeSauceをライブラリリスト自体に表示させることができれば、さらに良いでしょう。
解決済み-ニムロッドによる-説明とコードを読む
とにかく、それは素晴らしいことです。私は今、間抜けな素晴らしいもののために自分のウィジェットクラスを作ることができます。UIのFileOwnerをクラスに追加すると、通常のUIViewにすべてのものが含まれます。(ウィジェットのnib内の単一のビューをクラス自体にすることはできません。または、initWithCoderで再帰的になります。)次に、それを使用するnibで、バニラUIViewを作成し、そのクラスを変更します。その正方形の中にあるウィジェットを実際に見ることはできませんが、対処してください。
Selfは空白のビューになり、tMyActualSelfは他のペン先で作業を行った単一のビューです。わーい!
- (id)initWithCoder:(NSCoder*)coder
{
if ((self = [super initWithCoder:coder]))
{
UIView *tMyActualSelf = nil;
// Initialization code
NSArray *tNibItems = [[NSBundle mainBundle] loadNibNamed:@"UIAwesomeSauce" owner:self options:nil];
for (id object in tNibItems)
{
if ([object isKindOfClass:[UIView class]])
tMyActualSelf = (UIView *)[object retain];
}
if( tMyActualSelf )
{
tMyActualSelf.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
[self addSubview:tMyActualSelf];
}
}
return self;
}