iOS - 对View结构的一些想法

图片源自网络
#import "MyViewController.h"

@interface MyViewController ()
@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全部都放在最后

参考

iOS应用架构谈 view层的组织和调用方案

你可能感兴趣的:(iOS - 对View结构的一些想法)