如何在 iOS 中从 NIB 加载 NIB
Posted
技术标签:
【中文标题】如何在 iOS 中从 NIB 加载 NIB【英文标题】:How to load a NIB from NIB in iOS 【发布时间】:2015-04-28 23:18:01 【问题描述】:我通过 XIB 创建了 CustomViewController。
我还通过不同的 XIB 文件创建了 CustomView,它是 os UIView 的子类。
然后我将 UIView 绑定到 CustomViewController 并将其类设置为 CustomView。
问题在这里:然后我运行这个应用程序我没有看到我在 CustomView XIB 中创建的 CustomView 的内容。
为什么以及如何解决?
我需要在 CustomViewController 中有 CustomView,因为我需要设置这个视图的布局。
我可以从 ViewDidLoad 加载这个 CustomView,但我需要从 XIB 加载它
UIView *v = [[[NSBundle mainBundle] loadNibNamed:@"TopSegmentedControl" owner:self options:nil] firstObject ];
[self.view addSubview:v];
【问题讨论】:
我认为这不可能。您也许可以在加载 xib 文件的类上使用 IBDesignable。 尝试覆盖 initWithCoder: 在你的 UIView 子类中返回 [[[NSBundle mainBundle]..//etc]]; 杰夫,我试过了,有错误 【参考方案1】:我认为您应该考虑更改您的 UIView 子类,使其继承自 UIViewController,并作为子 ViewController 添加到层次结构中。如果你这样做了,那么你可以从界面构建器中的检查器托盘中添加 containerView 对象到外部 viewControllers 视图中,它会在那里添加新的(笔尖内的笔尖)供您将所有内容粘贴到..
我认为根据 cocoa 和 cocoaTouch 最近的变化,Apple 不希望我们从 nib 加载简单视图。请注意,顶部的“文件所有者”代理现在标记为“ViewController”
【讨论】:
绝对是我的建议。 我怎样才能在这里进行自动布局?此视图未针对不同设备调整大小【参考方案2】:您必须将包含在其中的代码放入 UIViewController 的 initWithCoder:
方法中。这是从情节提要初始化时调用的初始化方法。假设您已将一个名为 myView
的插座连接到它:
- (id)initWithCoder:(NSCoder *)aDecoder
if ((self = [super initWithCoder:aDecoder]))
self.myView = [[[NSBundle mainBundle] loadNibNamed:@"TopSegmentedControl" owner:self options:nil] firstObject];
return self;
【讨论】:
我怎样才能在这里进行自动布局?此视图未针对不同设备调整大小以上是关于如何在 iOS 中从 NIB 加载 NIB的主要内容,如果未能解决你的问题,请参考以下文章
如何在 init 方法中从 NIB 加载 IBOutlets?
IOS:如何使从 nib 文件加载的子视图可以使用它的按钮(IBAction)