iOS - 对View结构的一些想法
2018-02-07 本文已影响1人
SkyMing一C
图片源自网络
#import "MyViewController.h"
@interface MyViewController ()<UITableViewDelegate,UITableViewDataSource>
@property (nonatomic,strong)UITableView *tableView;
@property (nonatomic,strong)UIButton *backBtn;
@end
@implementation MyViewController
#pragma mark - life cycle
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)viewWillLayoutSubviews
{
}
- (void)viewDidLayoutSubviews
{
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - UITableViewDelegate
#pragma mark - UITableViewDataSource
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 2;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
return [[UITableViewCell alloc]init];
}
#pragma mark - CustomDelegate
#pragma mark - event response
-(void)backBtnClick:(UIButton *)backBtn
{
}
#pragma mark - getters and setters
- (UIButton *)backBtn
{
if (_backBtn == nil) {
UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeSystem];
[backBtn addTarget:self action:@selector(backBtnClick:) forControlEvents:UIControlEventTouchUpInside];
_backBtn = backBtn;
}
return _backBtn;
}
- (UITableView *)tableView
{
if (_tableView == nil) {
UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 100, 100) style:UITableViewStylePlain];
tableView.delegate = self;
tableView.dataSource = self;
_tableView = tableView;
}
return _tableView;
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
@end
life cycle
-
在viewDidLoad里面只做addSubview的事情
-
在viewWillAppear不做视图位置的修改,而用来更新Form数据
-
在viewWilllayoutSubview或者didLayoutSubview里改变位置,且在viewDidLayoutSubview确定UI位置关系之后设置autoLayout比较稳妥
viewWillLayoutSubviews虽然在lifeCycle里调用顺序在viewWillAppear之后,但是只有在页面元素需要调整时才会调用,避免了Constraints的重复添加。
delegate
每一个delegate都把对应的protocol名字带上,delegate方法不要到处乱写,写到一块区域里面去
比如UITableViewDelegate的方法集就老老实实写上#pragma mark - UITableViewDelegate。这样有个好处就是,当其他人阅读一个他并不熟悉的Delegate实现方法时,他只要按住command然后去点这个protocol名字,Xcode就能够立刻跳转到对应这个Delegate的protocol定义的那部分代码去,就省得他到处找了。
event response
event response专门开一个代码区域,所有button、gestureRecognizer的响应事件都放在这个区域里面,不要到处乱放。
getters and setters
-
所有的属性都使用getter和setter
-
getter和setter全部都放在最后