【iOS】Xib的使用与File'Owner总结
通过file's owner构建可在sb中使用的xib
macOS 和 iOS 中 Nib 文件实现原理以及最佳实践
使用XIB开发界面
前言
在日常开发中一些变化不多的页面常用Xib来创建,主要是因为简单而且比较直观,当然也可以用Storyboard或者纯code来写,至于选择哪一种,自然是萝卜白菜各有所爱
遇到的问题1:
同事写好了一个Xib及对应的View,但通过
[[[NSBundle mainBundle] loadNibNamed:@"xxxxView" owner:nil options:nil] firstObject]
的方式获取到后加到某个页面展示,展示是正常的,但是在再根据特定的场景隐藏这个Xib里的某些子View时发现没生效
缉凶过程:
然后debug一看,用这个xib创建的view里使用outlet的变量全是nil,仔细和以前使用的一些xib比较,发现这个Xib除了指定Class外还多指定了File's Owner,正式因为这个原因,导致加载后导致outlets没有关联到通过xib创建
解决之道:
发现了问题就自然能解决对应的问题了,解决方式如下:
解决方式1、去掉Xib的File's Owner,变成默认的NSObject,再把File's Owner对应的outlets删掉,之后再重新拖下outlets解决方式2、如果拖的outlet比较多,用一一删除并重新连线比价麻烦,也可以创建一个File's Ower的实例xxx作为
[[[NSBundle mainBundle] loadNibNamed:@"xxxxView" owner:xxx options:nil] firstObject]
来获得对应的引用,但Xib实例化的view和outlets引用的就不是同一个实例了,而我遇到的这个File‘s Owner比较特殊,设置的就是这个VIew的class,所以可以将xib实例化的view加到outlets所在的view,这样就没啥问题了,具体如下:
延伸:
Xib的这个File's Owner特性正很好的被带有Xib的controller使用,内部的实现机制大概也是先创建一个xxxcontroller的实例,然后在把这个controller的实例传入xib创建一个view,在把这个view设置成controller的view
网友评论