我正在制作一个我想在多个笔尖中使用的自定义小部件。所以我创建了一个新的视图笔尖 Screen3,添加了一些按钮,现在想要我的 UIAwesomeSauce 小部件。
如果我只是添加一个视图然后更改类标识,它不会从 UIAwesomeSauce nib 获取子元素。如果我去图书馆并切换到类,同样的事情。似乎只有 UIViewController 具有“从笔尖加载”的字段,这会很漂亮。
我知道我可以从代码中加载 UIAwesomeSauce 笔尖,获取顶级对象,然后手动放置。但 IB 的意义在于,您不必将内容放入代码中。如果我能让 UIAwesomeSauce 出现在库列表本身中,那就更好了。
已解决 - 由 Nimrod - 继续阅读以获取解释和代码
无论如何,dood,那太好了。我现在可以为愚蠢的真棒东西制作自己的小部件类。让你的 UI nib 的 FileOwner 成为你的类,在里面只有一个普通的 UIView 和你所有的东西。(小部件笔尖中的单个视图不能是类本身,否则您会在 initWithCoder 中递归。)然后在您要使用它的笔尖中,制作一个普通的 UIView 并更改其类。您将无法真正看到该正方形内的小部件,但可以交易。
Self 现在是一个空白视图,而 tMyActualSelf 是您在另一个 nib 中进行工作的单一视图。耶!
- (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;
}