keyInput實踐 實現乙個iOS網格密碼輸入框

2021-09-11 14:49:14 字數 1627 閱讀 2061

專案github位址

前幾天朋友問我,怎麼實現乙個輸入框的效果,設計圖就是下面這張:

如果總結下,就是當你輸入比較少的內容,而又希望整體比較美觀的話,就會這樣做,因為系統的uitextfield會把內容擠在一起。

然後我就來了興致,準備認真封裝下,寫乙個對於這類輸入框的通用控制項。所以就有了tfgridinputview

可以給小框的不同狀態設定不同的樣式,現在有:

如果設定了不同的樣式,那麼在輸入的時候,可以直觀的看到那些事輸入的、那些是沒輸入的,輸入位置也會比較醒目。當然這都是可以自由定義的,如果你不需要,可以把三種狀態設為一樣。

在專案**裡有詳細的各種例子,歡迎直接看**。這裡給出乙個簡單示例:

//構建乙個輸入框

_inputview = [[tfgridinputview alloc] initwithframe:cgrectmake(30, 120, 100, 200) row:3 column:6];

//構建乙個樣式,並調整各種格式

tfgridinputviewcellstyle *style = [[tfgridinputviewcellstyle alloc] init];

style.backcolor = [uicolor colorwithwhite:0.9 alpha:1];

style.textcolor = [uicolor colorwithwhite:0.1 alpha:1];

//如果各個狀態樣式一致,可以只設定empty狀態,它會作為預設值使用

[_inputview setstyle:style forstate:(tfgridinputviewcellstateempty)];

[self.view addsubview:_inputview];

//設定邊框和圓角

_inputview.divbordercolor = [uicolor lightgraycolor];

_inputview.divborderwidth = 0.5;

//設定圓角

_inputview.divcornerradius = 5;

//設定布局樣式

_inputview.layoutstyle = tfgridinputviewlayoutstylenogap;

}複製**

然後就可以使用了,大多數的工作都是在配置樣式。

構建了乙個tfgridinputview物件後,給了乙個frame,但是可能cell的寬度加上cell之間的間隙會超過frame,比如寬度100,然後一行5個cell,cell寬度30,這樣cell本身就佔據了150的寬度了。

對於這種情況我的處理是:cell的大小不變,cell之間間隙使用最小值,然後反過來調整父檢視的frame

比如上面的情況,如果間隙是8,那麼父檢視的寬度會被擴充為: 305 + 8(5+1) = 198。

這麼做是因為:

這樣既有自由度,也不會麻煩。需要的人需要,不需要的人不需要

歡迎使用,歡迎star

2017.5.15 更新

增加長按複製黏貼的功能

linux下如何實現為乙個網絡卡繫結多個IP位址

linux的網路裝置配置檔案存放在 etc sysconfig work scripts裡面,對於乙太網的第乙個網路裝置,配置檔名一般為 ifcfg eth0 如果需要為第乙個網路裝置繫結多乙個ip位址,只需要在 etc sysconfig work scripts目錄裡面建立乙個名為ifcfg e...

實現乙個Semaphore

其實這是我boss的想法,我一開始聽他這麼說也覺得比較差異,ms已經寫好了何必再自己寫乙個.答案有兩個 1ms寫的東西未必就是最好的,如完成埠,heap等.2semaphore是多執行緒程式設計中的核心元素所以有必要提速.我們都知道在多執行緒中ms提供的多個現成阻塞核心物件中critical mon...

乙個Redis Cache實現

應用中需要通過http呼叫遠端的資料,但是這個獲取過程需要執行較長時間,而且這個資料本身的變化也不頻繁,這種情況最適合用乙個cache來優化。前兩年在做短鏈結實現的時候,曾經用最好的語言php做過乙個redis cache實現 乙個簡單的redis應用 修訂版 但那個畢竟是乙個特定的實現,而且我現在...