创建的XIB类型为VC时,加载的注意点
代码布局有其便利之处,但是有时候部分布局需要重复使用,且结构比较复杂时,也可以使用XIb进行部分布局,此时封装一个viewcontroller类型的XIB可以节省后续很多维护的麻烦。但是使用XIB也会有一些地方需要注意,一不小心便要多花很多的时间来查找问题。此处列出部分遇到的问题,用于总结及日后查阅。
- 当创建的XIB的class为viewcontroller时,不只是需要在创建的ViewController上alloc\init,还要将XIB所在的Viewcontroller设为该控制器的子控制器:
[self addChildViewController:test]; //添加为当前控制器子控制器
控件设置圆角或圆形
在XIB的User Defined Runtime Attributes
属性中添加以下两个Key Path
:
//当cornerRadius的值为正方形控件二分之一时,
layer.cornerRadius-number-数值
layer.masksToBounds-bool-YES
为UIView的类创建XIB
我们可以为控制器创建配套的XIB,可是UIView上却不行,但是我们也可以通过一些特定的手段实现这一功能
选择XIB的View
上的Custom Class
的Class
选项,将其改成和类名一样,在对应的类中实现以下方法:
+(CustomView *)AcquireCustomView
{
//我们这里需要把这个xib加载出来而这个xib的所拥有者就是当前的对象`instantiateWithOwner:`这个方法就是对此xib文件进行拥有者关联,关联这个xib是属于哪一个类的我们当然这是self
CustomView *View = [[UINib nibWithNibName:@"CustomView" bundle:nil]instantiateWithOwner:self options:nil].lastObject;
return View;
}
- 此处使用类似
+(CustomView *)allocWithCustomView
的写法或是-(id)initWithXIB\[super init]
两种做法都可以,实现UINib
的方法及最后return
类的实例即可。
在需要调用该类的地方实现以下方法:
CustomView * theCustomView = [[CustomView AcquireCustomView]init];
[self.view addSubview:theCustomView];
//约束
theCustomView.frame = CGRectMake(50, 100, 200, 200);
- XIB上的控件可直接连线到类并实现
参考链接: iOS 给UIView添加单独XIB文件
网友评论