關(guān)于View層的規(guī)范和組織

前言

viewController的代碼應(yīng)該差不多這樣:

要點(diǎn)如下:

所有的屬性都使用getter和setter

不要在viewDidLoad里面初始化view然后addSubview. 在viewDidLoad里面只做addSubview的事情, 屬性的初始化, 則交給getter去做.
比如這樣:

#pragma mark - life cycle
- (void)viewDidLoad
{
    [super viewDidLoad];

    self.view.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:self.firstTableView];
    [self.view addSubview:self.secondTableView];
    [self.view addSubview:self.firstFilterLabel];
    [self.view addSubview:self.secondFilterLabel];
    [self.view addSubview:self.cleanButton];
    [self.view addSubview:self.originImageView];
    [self.view addSubview:self.processedImageView];
    [self.view addSubview:self.activityIndicator];
    [self.view addSubview:self.takeImageButton];

    [self layoutPageSubviews];
}

- (void) layoutPageSubviews
{
    CGFloat width = (self.view.width - 30) / 2.0f;

    self.originImageView.size = CGSizeMake(width, width);
    [self.originImageView topInContainer:70 shouldResize:NO];
    [self.originImageView leftInContainer:10 shouldResize:NO];

    self.processedImageView.size = CGSizeMake(width, width);
    [self.processedImageView right:10 FromView:self.originImageView];
    [self.processedImageView topEqualToView:self.originImageView];

    CGFloat labelWidth = self.view.width - 100;
    self.firstFilterLabel.size = CGSizeMake(labelWidth, 20);
    [self.firstFilterLabel leftInContainer:10 shouldResize:NO];
    [self.firstFilterLabel top:10 FromView:self.originImageView];

    ... ...
}

getter和setter全部都放在最后

一個(gè)ViewController很有可能會(huì)有非常多的view, 如果getter和setter寫(xiě)在前面, 就會(huì)把主要邏輯扯到后面去, 這樣不方面其他人查看. 寫(xiě)代碼的時(shí)候按照順序來(lái)分配代碼塊的位置, 先是life cycle, 然后是Delegate方法實(shí)現(xiàn), 然后是event response, 最后才是getter 和setter.

每一個(gè)delegate都把對(duì)應(yīng)的protocol名字帶上, delegate寫(xiě)在一個(gè)區(qū)域

比如UITableViewDelegate的方法集就寫(xiě)上#pragma mark - UITableViewDelegate. 方便查找

event response專門(mén)開(kāi)一個(gè)代碼區(qū)域

所有的響應(yīng)事件的處理都放在這個(gè)區(qū)域里面

關(guān)于private methods, 正常情況下ViewController里面不應(yīng)該寫(xiě)

不是delegate方法的, 不是event response方法的, 不是life cycle方法的, 就是private method了. 正常情況下viewController里面一般是不會(huì)存在private methods的, 寫(xiě)成一個(gè)category或者做成一個(gè)模塊. 這樣一開(kāi)始獨(dú)立出來(lái), 方便以后代碼的復(fù)用.

在iOS開(kāi)發(fā)中, MVC劃分的正確姿勢(shì):

M應(yīng)該做的事情:

1.給ViewController提供數(shù)據(jù)
2.給ViewController存儲(chǔ)數(shù)據(jù)提供接口
3.提供經(jīng)過(guò)抽象的業(yè)務(wù)基本組件, 供Controller調(diào)度

C應(yīng)該做的事情:

1.管理ViewController的生命周期
2.負(fù)責(zé)生成所有的View實(shí)例, 并放入ViewContainer中
3.監(jiān)聽(tīng)來(lái)自View與業(yè)務(wù)有關(guān)的時(shí)間, 通過(guò)與Model的合作, 來(lái)完成對(duì)應(yīng)事件的業(yè)務(wù)

V應(yīng)該做的事情:

1.相應(yīng)與業(yè)務(wù)無(wú)關(guān)的事件, 并因此引發(fā)動(dòng)畫(huà)效果, 點(diǎn)擊反饋等
2.界面元素表達(dá)

Reference

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容