- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作一个自定义小部件,我想在多个 Nib 中使用它。因此,我创建了一个新 View nib Screen3,添加了一些按钮,现在想要我的 UIAwesomeSauce 小部件。
如果我只是添加一个 View ,然后更改类标识,它不会从 UIAwesomeSauce Nib 获取子元素。如果我去图书馆并切换到类(class),也会发生同样的情况。似乎只有 UIViewController 具有“从 Nib 加载”字段,这会很漂亮。
我知道我可以从代码加载 UIAwesomeSauce Nib ,获取顶级对象,然后手动放置它。但 IB 的目的是让您不必将内容放入代码中。如果我能让 UIAwesomeSauce 显示在库列表本身中,那就更好了。
已解决 - 由 Nimrod - 阅读说明和代码
无论如何,dood,这太棒了。我现在可以为愚蠢的很棒的东西制作自己的小部件类。将 UI nib 的 FileOwner 设为您的类,并在其中包含一个包含所有内容的普通 UIView。 (小部件 Nib 中的单个 View 不能是类本身,否则您会在 initWithCoder 中递归。)然后在要使用它的 Nib 中,创建一个普通 UIView 并更改其类。您将无法实际看到该方 block 内的小部件,但是可以处理。
Self 现在是一个空白 View ,tMyActualSelf 是您在另一个 Nib 中完成工作的单个 View 。耶!
- (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;
}
最佳答案
当谈到 UIViewController 是唯一可以指定 Nib 加载的东西时,我感到你的痛苦,但我认为这是因为必须有一个文件的所有者是一个 Controller ,或类似的东西,尽管我不确定为什么 UIView 不能成为文件的所有者。
我认为您可以将库中的内容放在“自定义对象”下,但我认为您只能将 UIView 放入其中,并将该类设置为 UIView 的自定义子类。我实际上研究过尝试扩展界面构建器,看起来你可以为 OS X 的东西做到这一点,但不能为 iPhone 的东西做到这一点。它涉及在界面构建器中为新小部件编译代码,以告诉它如何在 IB 中绘制小部件。我认为实际上有一个用于此目的的 OS X 模板。
我认为我可能会做的是在包含所有 subview 的 nib 文件中创建一个主视图,然后在 initWithCoder: 在 UIAwesomeSauce 中打开 nib 文件,加载主视图,然后将其放入 self 中这样你在 UIAwesomeSauce View 和 subview (或子 subview ,视情况而定)之间就有一个“不必要的” View 。我不确定这有多低效,但在搞乱一些东西时,它看起来像 UIWebView 这样的 View 似乎有这些看似不必要的中间观点之一(IIRC)。
如果您提出更好的解决方案,请告诉我,因为我也想知道。
编辑
现在我看看它,我认为 UIView 可以是文件的所有者,你只是不能在 IB 中设置它。基本上你会在 UIView 子类中像这样调用 nib load:
[捆绑 loadNibNamed:@"UISpecialSauce"所有者:self 选项:...]
我认为,如果您在 UISpecialSauce 或其他什么中创建 socket ,那么由于所有者:self,它们应该被正确分配。
关于iphone - 如何在 Interface Builder 中获取 View 以在另一个 Nib 中加载自定义 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3944964/
我是一名优秀的程序员,十分优秀!