【问题标题】:UIView that loaded from nib files , can i set the owner to the view it self?从 nib 文件加载的 UIView,我可以将所有者设置为它自己的视图吗?
【发布时间】:2015-05-15 03:45:58
【问题描述】:

最常用的初始化方法是

UIView *rootView = [[[NSBundle mainBundle] loadNibNamed:@"MyRootView" owner:self options:nil] objectAtIndex:0];

在我的例子中,self 是指视图控制器,但我必须将所有者设置为视图本身,因为 .m 和 .xib 之间有很多出口,如何处理这种情况?

【问题讨论】:

  • 没有正确解释您的问题。
  • 问题是在上面的 loadNibNamed 中,我必须将 uiview 的 xib 的文件所有者设置为视图控制器(因为我在视图控制器中使用此视图),这导致许多插座连接崩溃(因为插座是在自定义视图类中定义的,而不是视图控制器类)。
  • 您需要将 uiview 的 xib 的文件所有者设置为视图类(而不是视图控制器)。
  • 并且在代码集中所有者为 nil?
  • 创建自定义 UIView.. 在情节提要中为其设置标识符。并将此类分配给您的 rootViewControllers 视图。并将“MyRootView”设置为您的 RootViewController 作为情节提要标识符。

标签: ios xib nib


【解决方案1】:

您应该在 view.m 类中使用 init 方法,例如:

- (id)initWithNibNamed:(NSString *)nibName{
     NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:nibName owner:nil options:nil];
     self = [nibContents lastObject];
     if(self){

        //do your code here
      }
     return self;
 }

并从视图控制器调用此方法。将视图连接到视图 xib。

【讨论】:

  • 添加一个init方法不如为UIView创建一个类别方便。
【解决方案2】:

感谢栈溢出,这类问题已经有了完美的解决方案。 https://github.com/PaulSolt/CompositeXib 关键是在自定义视图的实现中调用 loadNibNamed,而不是在创建视图的控制器中。

【讨论】:

  • 我认为这是一种不同的方法~在链接中的示例代码中,我们不需要做任何事情来混合控制器和视图。控制器是控制器,视图是视图。没有视图的所有者是控制器。但仍然非常感谢您的大力帮助:) @AshokLondhe
  • 没关系,但我也告诉过你。
  • 我想也许你在故事板项目中告诉我同样的事情:) 但我无法得到它,因为我不经常使用故事板:)
猜你喜欢
  • 2017-04-05
  • 2011-11-27
  • 1970-01-01
  • 2019-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-26
  • 1970-01-01
相关资源
最近更新 更多