一、即使是在休息日里,也应该及时做总结,不能任由自己拖沓懒散。周日时也算学了些生活必需的技能,也算对影视作品有了些感想,应当写下来。今日需得补记
二、xib 和 control的关系
2.1 xib是纯粹的xml文件,相当于HTML页面
2.2 control是JS,用于驱动用户交互
2.3 xib和control关联,用cotrol去驱动xib
2.4 xib和view关联,一般是为了做页面配置
2.6 xib里初始化的顺序是
2.6.1 在initWithFrame里创建子控件
@property (weak,nonatomic) UIButton *button; // 一个IBOutlet
- (instancetype)initWithFrame: (CGRect)frame
{
if (self = [super initWithFrame: frame]) {
UIButton *button = ... // 创建一个button
[button setTitle: ...] // 设置button的属性
[self.view addSubview: button]; // 将button加到view中,并不设置尺寸
self.button = button; //将self.button指向这个button,从而保证在layoutSubviews中可以访问
UILabel *label = ... // 其他的子控件同理
}
}
先创建再赋值
2.6.2 在layoutSubviews里设置frame
- (void)layoutSubviews
{
[super layoutSubviews]; // 注意,一定不要忘记调用父类的layoutSubviews方法!
self.button.frame = ... // 设置button的frame
}
在初始化自定义类时,一般用传模型的方法,比如有个book类,要在自定义类customView的label上显示它的name属性,要在 text上显示它的like属性,于是这么做
customView.h
@property (nonatomic, strong) Book *book; // 在这里定义个属性
customView.m
// 重写模型的set方法,并在这里赋值
- (void)setBook: (Book *)book
{
_book = book; // 将模型传给当前页面
[self.button setTitle: book.like forState...]; // 将模型里的值放到页面上
self.label = book.name;
}
// 调用时
Book *book = self.books[index]; // 这里指拿到books这个数据中的某个数据用于显示
view.book = book; // 设置view本身的book值,这时就会调用set方法来赋值
小结一下:
1、添加子控件
1.1 在initWithFrame里,动态生成控件,将控件加到subview上,接着将控件赋给view的属性
2、将模型赋给根view
2.1 设置一个模型对应的property,为( strong,nonatomic )类型
2.2 在view里重写模型的set方法,加上显示到页面的操作
2.3 调用时,在initWithFrame里,写上
self.book = book;
就调用了set方法,在里面显示模型值
三、关于center horizontal 和 center vertical 怎么理解
3.1 center horizontal 表示在控件内随便拉一条水平线,取其中点,然后不同控件的中点在同一条线上
3.2 center vertical 表示在控件内随便拉一条竖直线,取其中点,然后不同控件的中点在同一条线上
3.3