需求簡介
系統(tǒng)的鍵盤輸入被認(rèn)為是不安全的,所以在一些敏感信息的輸入時,要求用安全鍵盤。這個做起來比較麻煩,所以一般都會購買第三方的安全鍵盤組件來使用。
集成
這次用到的第三方,給出的組件是.a形式的靜態(tài)庫,集成進(jìn)來之后是這樣的:

如何封裝?
所謂的安全鍵盤,其實是在系統(tǒng)的UITextField的基礎(chǔ)上進(jìn)行的二次開發(fā),添加了加解密,保證安全性。同時不用系統(tǒng)鍵盤輸入,而是采用自定義的view,自定義的鍵盤。
所以,采用一個自定義的view來封裝,簡單講就是再包一層。
(1) 作為容器,使密碼控件四周緊貼。這樣的話控件的位置和大小和這個容器View就完全一致了。。
(2)將一些參數(shù)固定下來,方便多次多地調(diào)用。
封裝過程
安全控件是作為商品賣的,所以一般都會有一個類似
licence的參數(shù),用來標(biāo)識客戶。在用的時候,這個參數(shù)只要在一個地方固定下來就可以了,沒必要每次用都設(shè)置一次。安全控件,加密是重點內(nèi)容之一。加密方式有很多種,在用的時候,可以固定一種。
響應(yīng)方式是代理的形式,不是很喜歡,所以將這個容器
view作為代理,對外提供block形式的接口。

- 第三方的安全控件作為這個容器
View子組件

- 在初始化方法
initWithFrame中設(shè)置一些屬性

- 重寫
layoutSubviews,讓安全控件textField和容器view完全緊貼,這樣容器的位置大小就是安全控件的位置和大小

- 實現(xiàn)代理,并輸出加密后的字符串。

- 接口,只有一個加密后的字符串。TextField的功能也就是接收用戶輸入,然后得到一個字符串。安全控件,也就是得到一個加密的字符串。

優(yōu)缺點:這樣封裝比較徹底,并且連代理函數(shù)也實現(xiàn)了,外界使用很方便。不過,這樣封裝之后,本質(zhì)是一個
UIView,而不是UITextField,原本具有的很多屬性就丟失了。比如,placeholder這個UIView所沒有的屬性。
繼承式封裝
為了保持UITextField的特性,可以考慮繼承式封裝。因為第三方控件是從UITextField繼承而來的,所以我們的自定義TextField可以直接繼承第三方控件。
- 將公共配置寫成一個公共方法

- 重寫初始化方法,包括代碼創(chuàng)建,xib創(chuàng)建,以及安全控件新增的初始化方法。

優(yōu)缺點:這樣封裝不夠徹底,大多數(shù)情況下不是很好。不過優(yōu)點是保持了一開始的
UITextField的特性,比UIView要多一些屬性可用。