【问题标题】:Assign a view controller to a custom .xib将视图控制器分配给自定义 .xib
【发布时间】:2016-02-10 18:55:59
【问题描述】:

我创建了一个自定义的可重复使用的 XIB,并为它分配了一个来自 UIView 的类子类。

  • BannerView.xib(文件所有者设置得当
  • BannerView.h : UIView
  • 横幅视图.m

这里是 initWithFrame:

-(instancetype)initWithFrame:(CGRect)frame {

self = [super initWithFrame:frame];

if(self) {
self = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:self options:nil] firstObject];
}

return self;
}

一切正常,我可以初始化这个自定义 .xib 并将其添加到我的 VC:

BannerView *bannerView = [[BannerView alloc]init];
[_profileContentArea addSubview:bannerView];

虽然,我希望这个自定义 .xib 拥有它自己的 VC,然后能够通过 VC 而不是上面的方式添加为子视图。考虑到我目前的现有设置,我将如何处理。

【问题讨论】:

    标签: ios objective-c xcode uiviewcontroller xib


    【解决方案1】:

    你的init方法是initWithFrame,所以你必须像这样创建BannerView

    BannerView *bannerView = [[BannerView alloc]initWithFrame:frame];
    

    然后你可以添加到 ViewController

    【讨论】:

      【解决方案2】:
      -(instancetype)initWithFrame:(CGRect)frame {
      
      self = [super initWithFrame:frame]; 
      
      if(self) {
          self = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:self options:nil] firstObject];
      }
      
          return self;
      }
      

      请注意初始化步骤

      +alloc: 分配内存 -init : 初始化必要的属性

      当您调用alloc 并在initinitWithFrame: 中设置一些属性时,您已经获得了视图对象

      当你打电话时

      self = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:self options:nil] firstObject];
      

      旧视图对象已消失,因为您刚刚设置了一个来自 xib 的新视图对象

      你为什么不使用 -[UIViewController initWithNibName:nibBundle:] 你可以随意设置 nib

      【讨论】:

      • "你为什么不使用 -[UIViewController initWithNibName:nibBundle:] 你可以随心所欲地设置 nib" 你能否提供一个教程的链接,也许它展示了如何将 XIB 连接到它自己的风投?如果没有,我可以执行上述操作,但是我是否需要进行任何其他设置,例如将 XIB 的类更改为 VC 或更改文件所有者等?
      • @user1686342 更改文件所有者,当您创建视图控制器时,您可以指定所需的 xib。我在想你想重用你的控件或视图。您可以尝试自定义可以在其他地方使用的控件,尽量不要布局自定义控件/视图的子视图,让您的控件通过 layoutsubview 或 autolayout 来完成。你的视图控制器会很简单。那么你可以避免你问的问题。这是我的意见。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-01
      • 1970-01-01
      • 2018-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      相关资源
      最近更新 更多