我正在制作一个我想在多个笔尖中使用的自定义小部件.所以我创建一个新的视图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; }
Nimrod.. 14
我觉得你的痛苦当UIViewController是唯一可以指定nib加载的东西,但我认为这是因为必须有一个文件所有者,它是一个控制器,或类似的东西,虽然我不知道为什么UIView不能是文件的所有者.
我认为你可以把东西放在自定义对象下的库中,但我认为你只能将UIView放在那里,只需将类设置为UIView的自定义子类.其实,我看着想扩展接口生成器,它看起来像你可以为OS X的东西做的,而不是iPhone的东西.它涉及在界面构建器中编译新窗口小部件的代码,以告诉它如何在IB中绘制窗口小部件.我认为实际上有一个OS X模板.
我想我可能要做的是在包含所有子视图的nib文件中创建一个主视图,然后在initWithCoder中:在UIAwesomeSauce中打开nib文件,加载主视图,然后将它放在self中以便你在UIAwesomeSauce视图和子视图(或子视图,视情况而定)之间有一个"不必要的"视图.我不确定它是多么低效,但在搞乱一些东西看起来像UIWebView之类的一些视图似乎有其中一个看似不必要的中间观点(IIRC).
如果你想出一个更好的解决方案,请告诉我,因为我也想知道.
编辑
现在,我看它,我想了UIView可以是文件的所有者,你不能把它架在IB.基本上你在UIView子类中调用nib加载这样的东西:
[bundle loadNibNamed:@"UISpecialSauce"所有者:自选:...]
我认为,如果你创建UISpecialSauce或任何网点那么他们应该被分配正确,因为业主的:自我.
我觉得你的痛苦当UIViewController是唯一可以指定nib加载的东西,但我认为这是因为必须有一个文件所有者,它是一个控制器,或类似的东西,虽然我不知道为什么UIView不能是文件的所有者.
我认为你可以把东西放在自定义对象下的库中,但我认为你只能将UIView放在那里,只需将类设置为UIView的自定义子类.其实,我看着想扩展接口生成器,它看起来像你可以为OS X的东西做的,而不是iPhone的东西.它涉及在界面构建器中编译新窗口小部件的代码,以告诉它如何在IB中绘制窗口小部件.我认为实际上有一个OS X模板.
我想我可能要做的是在包含所有子视图的nib文件中创建一个主视图,然后在initWithCoder中:在UIAwesomeSauce中打开nib文件,加载主视图,然后将它放在self中以便你在UIAwesomeSauce视图和子视图(或子视图,视情况而定)之间有一个"不必要的"视图.我不确定它是多么低效,但在搞乱一些东西看起来像UIWebView之类的一些视图似乎有其中一个看似不必要的中间观点(IIRC).
如果你想出一个更好的解决方案,请告诉我,因为我也想知道.
编辑
现在,我看它,我想了UIView可以是文件的所有者,你不能把它架在IB.基本上你在UIView子类中调用nib加载这样的东西:
[bundle loadNibNamed:@"UISpecialSauce"所有者:自选:...]
我认为,如果你创建UISpecialSauce或任何网点那么他们应该被分配正确,因为业主的:自我.