Objective-C iOS純程式碼佈局 一堆程式碼可以放這裡!
前言:
最近寫的文章都是創業類,好吧,今天好好寫寫技術類的文章!
不過分享的不是IOS相關的文章,畢竟這幾天在速成IOS,看的是objective-c,由於速成的很快,好累!
好在現在基本已經入了點門道了,這才看的懂新人的程式碼,才能提前感受程式碼危機。
對於IOS的速成口訣,回頭再分享,今天先分享一個簡單的抽象封裝!
1:先看看問題
說明:通常對於介面佈局,有編寫程式碼、Xib、Storyboard三種方式,而我看到新人寫的,是通過程式碼佈局的。
看到的程式碼是這樣的:
A:編寫UI的程式碼已分離到新的類(.h .m檔案)去,但仍然還是留下了不少程式碼在ViewController中。
圖1:(在頁載入完後,呼叫了SetView方法,然後SetView方法裡一堆和UI相關的程式碼)
圖2:
2:想想怎麼優化
目標:讓每一個Controller都有一個對應的View的UI類,而Controller類裡不要涉及UI建立的問題,儘量0入侵。
折騰過程:
這幾天學了下ObjectC的擴充套件類Category,覺的這東東有點搞頭。(和C#裡的擴充套件類很像,但不同的是,object-C裡擴充套件方法可以在基類裡調到,這很神奇)
可惜擴充套件類不支援屬性,沒法把一些變數放到擴充套件類的屬性裡,逼的要入侵Controller。
於是我又思考,折衷一下,用泛型定義一個共性的UIView,以避開入侵。
結果還是失敗了,objective-C的泛型不支援子類定義型別,唉~~~~
發現在C#輕鬆搞定的事,在object-c裡不容易啊!!!
3:二次折衷的方法:
1:定義Controller的基類,定義一個方法,並在頁面載入時呼叫。
2:假設有LoginController,新建一個LoginView,繼承自UIView
3:一些UI相關的定義變數就寫在這裡了(.h檔案)
4:在LoginView新增一個擴充套件類(不用新建類檔案了,直接追加程式碼就好了):
這裡擴充套件了一個方法叫initUI(等於重寫基類的方法)
5:這裡就是唯一二次折衷的地方,需要入侵Controller.h,定義一個UI屬性。
(之前是想通過把這個屬性定義到基類去,可惜泛型不支援子類指定型別)
6:接下來就是寫你的UI相關的程式碼了。
總結:
1:手工寫的程式碼的視覺化,在除錯階段才能看到,這是很悲催的結果。
2:個人不太建議手工佈局程式碼的,開發效率也是個問題(當然你可以通過封裝一些UI程式碼進一步提升下效率)。
3:不知道XCode沒有摺疊.h檔案到.m檔案下的外掛呢?檔案太多,切來切去太傷眼了。