題記

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

基類設(shè)計需求

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

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

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

self.view.backgroundColor = [BQTools randomColor];

接下來是自定義返回按鈕的問題,(目前大部分APP都是用導(dǎo)航欄推出下個控制器,如果用present模態(tài)推出。那可忽略此段內(nèi)容)?;谧罘奖愕膶崿F(xiàn)方法即在VIew視圖加載時,直接給導(dǎo)航欄生成一個左側(cè)欄item。并實現(xiàn)其點擊方法達到導(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問題,但衍生出一個新問題,即當(dāng)導(dǎo)航欄的第一控制器也會存在一個左側(cè)欄item,并實現(xiàn)了pop方法。所以我們需要在這里再加上一個判定情況,使其在導(dǎo)航欄第一控制器不存在此item。所以更新后的代碼如下

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