在项目中经常会将一个复杂的页面分为多个页面加载显示,区分逻辑的同时避免臃肿。在这里记录一下。
1、代码加载
代码加载的方式对于view模块分块加载方便简单多了,也有利于团队的协作和维护
@interface ViewWithoutXib : UIView
//类方法加载 -- 初始化方法在其中
+(instancetype)initWithFrame:(CGRect)frame withTitle:(NSString *)title;
@end
@interface ViewWithoutXib()
@property (nonatomic , strong) UILabel * titleLB;
@end
@implementation ViewWithoutXib
+(instancetype)initWithFrame:(CGRect)frame withTitle:(NSString *)title{
return [[self alloc] initWithFrame:frame withTitle:title];
}
//初始化
-(instancetype)initWithFrame:(CGRect)frame withTitle:(NSString *)title{
self = [super initWithFrame:frame];
if (self) {
[self initView:title];
}
return self;
}
//加载控件
-(void)initView:(NSString *)title{
self.backgroundColor = [UIColor yellowColor];
self.titleLB.text = title;
}
#pragma getter and setter
-(UILabel *)titleLB{
if (_titleLB == nil) {
_titleLB = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, self.frame.size.width - 20, self.frame.size.height)];
[self addSubview:_titleLB];
}
return _titleLB;
}
2、xib加载
xib加载相对而言,在构建页面上比较方便,做起来比较块,但是对应的注意的点也比较多。
-
新建UIView,Xcode新建UIView不能同时关联xib ,需要自己再新建xib文件进行关联
新建View.jpg -
xib界面File's owner处为空(不同于ViewController),customClass的class处填写view的类名
File's owner.jpg
Class.jpg
2018.06.12新增
设置 frame大小时,实际运行时发现高度没有固定,是Autoresizing的设置问题(纵向设置不需要设置)
Autoresizing.png
- 初始化
加载xib文件,进行关联
- (nullable NSArray *)loadNibNamed:(NSString *)name owner:(nullable id)owner options:(nullable NSDictionary *)options;
控件加载
@interface ViewWithXib : UIView
+(instancetype)initWithXib:(CGRect)frame withTile:(NSString *)title;
@end
@implementation ViewWithXib
+(instancetype)initWithXib:(CGRect)frame withTile:(NSString *)title{
ViewWithXib *view = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:self options:nil].lastObject;
view.frame = frame;
view.title = title;
[view awakeFromNib];
return view;
}
//1、正在准备初始化 -- loadNibName 之后会调用
- (instancetype)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
}
return self;
}
//2、初始化完毕`(若想初始化时做点事情,最好在这个方法里面实现)`
- (void)awakeFromNib {
[super awakeFromNib];
self.titleLB.text = self.title;
}
@end
运行结果
结果.png
虽然简单,但还是在这里记录一下。
网友评论