題記

在進(jìn)入新公司后。經(jīng)過(guò)這一個(gè)月的重構(gòu)項(xiàng)目,終于把項(xiàng)目做到了個(gè)人相對(duì)滿意的程度(還有一種不滿意的叫老板的需求,提過(guò)多次意見(jiàn)也沒(méi)用= =!)。在這次重構(gòu)中按照以前的思路設(shè)計(jì)出了個(gè)人覺(jué)得比較適用的一個(gè)基類。在這里筆者會(huì)把此基類基本的設(shè)計(jì)說(shuō)明一遍。

基類設(shè)計(jì)需求

1.在我們搭建框架之初一般會(huì)設(shè)計(jì)一個(gè)ViewController基類,并在基類ViewDidLoad中設(shè)置一個(gè)隨機(jī)的背景顏色。并通過(guò)touch手勢(shì)來(lái)進(jìn)行界面的跳轉(zhuǎn),以此來(lái)設(shè)計(jì)最開始的一個(gè)界面跳轉(zhuǎn)框架,并通過(guò)界面顏色的變幻來(lái)驗(yàn)證我們界面跳轉(zhuǎn)是否有做到正常跳轉(zhuǎn)。
2.接下來(lái)可能需要設(shè)計(jì)到的一個(gè)問(wèn)題就是導(dǎo)航欄返回按鈕的問(wèn)題,因?yàn)橄到y(tǒng)自帶的導(dǎo)航欄返回按鈕相對(duì)來(lái)說(shuō)不太好看。通常我們會(huì)將返回按鈕進(jìn)行自定義。在這里我們通過(guò)方法直接實(shí)現(xiàn)重定義導(dǎo)航欄左邊按鈕達(dá)到我們想要的效果
3.在很多時(shí)候我們對(duì)View子視圖進(jìn)行布局時(shí),可能子視圖的范圍偶爾會(huì)超時(shí)View視圖bounds范圍。此時(shí)可能還需要設(shè)計(jì)一個(gè)方法來(lái)讓View的子視圖即使在View的bounds范圍之外也能得以呈現(xiàn)。

Vc基類設(shè)計(jì)實(shí)現(xiàn)

對(duì)于上述需求,其中需求1最好解決。我們普遍的做法是寫一個(gè)自己的工具類,然后在viewDidLoad中通過(guò)工具類生成一個(gè)隨機(jī)的顏色作為基類視圖的背景色,從而查看是否達(dá)到跳轉(zhuǎn)目的。

self.view.backgroundColor = [BQTools randomColor];

接下來(lái)是自定義返回按鈕的問(wèn)題,(目前大部分APP都是用導(dǎo)航欄推出下個(gè)控制器,如果用present模態(tài)推出。那可忽略此段內(nèi)容)?;谧罘奖愕膶?shí)現(xiàn)方法即在VIew視圖加載時(shí),直接給導(dǎo)航欄生成一個(gè)左側(cè)欄item。并實(shí)現(xiàn)其點(diǎn)擊方法達(dá)到導(dǎo)航欄pop的目的。此處的“back”為自定義的返回按鈕視圖

UIBarButtonItem * leftBarItem = [[UIBarButtonItem alloc] initWithImage:[[UIImage imageNamed:@"back"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] style:UIBarButtonItemStylePlain target:self action:@selector(leftBarItemAction:)];self.navigationItem.leftBarButtonItem = leftBarItem;

這樣的情況是方便的解決的需求2問(wèn)題,但衍生出一個(gè)新問(wèn)題,即當(dāng)導(dǎo)航欄的第一控制器也會(huì)存在一個(gè)左側(cè)欄item,并實(shí)現(xiàn)了pop方法。所以我們需要在這里再加上一個(gè)判定情況,使其在導(dǎo)航欄第一控制器不存在此item。所以更新后的代碼如下

if ([self.navigationController.viewControllers indexOfObject:self] != 0) {    UIBarButtonItem * leftBarItem = [[UIBarButtonItem alloc] initWithImage:[[UIImage imageNamed:@"back"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] style:UIBarButtonIt
        
		

網(wǎng)友評(píng)論