gpt4 book ai didi

iphone - 如何在 Interface Builder 中获取 View 以在另一个 Nib 中加载自定义 View ?

转载 作者:行者123 更新时间:2023-12-03 18:17:21 24 4
gpt4 key购买 nike

我正在制作一个自定义小部件,我想在多个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com