从 nib 文件加载的 UIView,我可以将所有者设置为它自己的视图吗?
Posted
技术标签:
【中文标题】从 nib 文件加载的 UIView,我可以将所有者设置为它自己的视图吗?【英文标题】:UIView that loaded from nib files , can i set the owner to the view it self? 【发布时间】: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 作为情节提要标识符。 【参考方案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 没关系,但我也告诉过你。 我想也许你在故事板项目中告诉我同样的事情:) 但我无法得到它,因为我不经常使用故事板:)以上是关于从 nib 文件加载的 UIView,我可以将所有者设置为它自己的视图吗?的主要内容,如果未能解决你的问题,请参考以下文章
NSObject 用 nib 加载 UIView 但文件所有者是 UIViewController