【问题标题】:How to load a NIB from NIB in iOS如何在 iOS 中从 NIB 加载 NIB
【发布时间】: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]];
  • 杰夫,我试过了,有错误

标签: ios objective-c uiview nib


【解决方案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;
    }
}

【讨论】:

  • 我怎样才能在这里进行自动布局?此视图未针对不同设备调整大小
猜你喜欢
  • 1970-01-01
  • 2011-02-08
  • 1970-01-01
  • 1970-01-01
  • 2011-02-05
  • 1970-01-01
  • 1970-01-01
  • 2014-09-11
  • 1970-01-01
相关资源
最近更新 更多