我正在制作一个我想在多个笔尖中使用的自定义小部件.所以我创建一个新的视图nib Screen3,添加一些按钮,现在想要我的UIAwesomeSauce小部件.
如果我只是添加一个视图然后更改类标识,它就不会从UIAwesomeSauce笔尖获取子元素.如果我去图书馆并切换到Classes,也是一样的.似乎只有UIViewController具有"从笔尖加载"字段,这将是美丽的.
我知道我可以从代码中加载UIAwesomeSauce笔尖,获取顶级对象,然后手动放置它.但IB的观点是,您不必将代码置于代码中.如果我能让UIAwesomeSauce显示在图书馆列表中,那就更好了.
解决 - 由尼姆罗德 - 阅读解释和代码
无论如何,dood,那太好了.我现在可以制作自己的小部件类,用于愚蠢的真棒.让您的UI的FileOwner成为您的类,并在其中只有一个普通的UIView与您的所有东西.(小部件的nib中的单个视图不能是类本身,或者你在initWithCoder中得到递归.)然后在你要使用它的nib中,创建一个vanilla 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;
}
Run Code Online (Sandbox Code Playgroud)