iOS自定義安全鍵盤

在工作之余開始自學iOS開發(fā),接觸`textField`控件時發(fā)現(xiàn)能夠自定義鍵盤瘸恼,于是開始仿寫ICBC的安全登錄鍵盤劣挫。起初并沒有按照MVC的模式進行,在`mainStoryboard`里自定義了4個View东帅,分別是inputAccessoryView压固、inputCharView(字母鍵盤)、inputNumberView(數(shù)字鍵盤)和inputSignView(符號鍵盤)靠闭。

設置```pwdTextField.inputAccessoryView=self.inputAccessoryView```帐我,pwdTextField.inputView通過點擊`inputAccessoryView`上的鍵盤類型按鈕(數(shù)字、字符和符號)進行切換阎毅。存在的一個問題:每次點擊“類型按鈕”后都得先讓`pwdTextField`放棄第一響應者焚刚,然后設置`pwdTextField`的`inputAccessoryView`和`inputView`点弯,再讓`pwdTextField`成為第一響應者扇调。雖然這樣也能夠實現(xiàn)鍵盤功能,但是覺得這樣做太low抢肛。

注:pwdTextField是密碼輸入框狼钮。

目前已實現(xiàn)的功能有:

?數(shù)字鍵盤使用隨機數(shù)字

?記住用戶名,登錄時省去重新輸入用戶名之繁瑣

?點擊頭像捡絮,放大顯示

?點擊頭像編輯按鈕熬芜,可以從相機或相冊選擇照片并加以保存

?自定義Alert彈出框

?明暗文密碼切換

?textField placeholder左右抖動

?按下字母、符號按鍵福稳,文字放大顯示動畫

?密碼框重新成為第一響應者時涎拉,鍵盤恢復成小寫字符鍵盤

鍵盤演示示意圖

今年5月初的時候想將之前寫的安全鍵盤按照MVC的模式重新整理下,在梳理的過程中突然有個想法——通過點擊鍵盤類型按鈕來改變`inputCharView.leading`約束值來切換不同類型鍵盤的圆。具體布局示意如下:

布局示意

約束條件如下:

約束條件
約束示意圖

將`blueView.leading`通過`IBOutlet`的方式設置成NSLayoutConstraint *leftConstraint鼓拧,點擊紅色按鈕時設置`leftConstraint.constant=kScreenWidth`(屏寬),點擊藍色按鈕`leftConstraint.constant=0`越妈,點擊黃色按鈕`leftConstraint.constant= - kScreenWidth`季俩。

這里遇到一個小坑:設置blueView約束條件時,起初設置`blueView.trailing=0`梅掠,點擊類型按鈕時一直不能切換到與之類型相對應的鍵盤View酌住。將`blueView.trailing=0`修改為`blueView`與其父視圖等寬即可。

字符鍵盤約束設置

接下來設置鍵盤上各個按鈕的約束條件阎抒,先從相對復雜的字符鍵盤按鈕開始酪我。我的想法是每個按鈕的寬、高設為定值且叁,分別為30和42祭示,按鈕q距離父視圖左邊=0,p距離父視圖右邊為0,第一排各個按鈕top=8质涛,各個按鈕之間的間距等寬(`Equal widths`)稠歉。設置按鈕間等間距且要適應不同屏幕尺寸適配問題,我采用了一些輔助UIView進行約束設置汇陆。完成設置時將輔助的View背景色設置為透明即可怒炸。

具體步驟:

1,設置按鈕q的約束條件:寬=30毡代,高=42阅羹,上=8,左=10教寂;

按鈕q的約束條件

2捏鱼,分別設置w,e,r……o,p按鈕與按鈕q之間的約束:等寬、等高酪耕、水平居中导梆;

按住鍵盤上的Control鍵的同時左鍵鼠標選中w按鈕并將其拖至按鈕q上,松開鼠標按鍵和Control鍵迂烁。此時按住鍵盤上的shift按鍵依次點擊“Center Vertically”,"Equal widths"和“Equal Heights”按鈕看尼,最后點擊“Add Constraints”按鈕。第一排的其他按鈕約束條件的設置步驟同w按鈕盟步。

等寬藏斩,等高,等水平

3却盘,設置p的約束:右=10狰域,上=8;

4黄橘,接下來設置按鈕等間距兆览,拖拉UIView并將其放置在各個按鈕中間,方便看清View將其背景色設置為紅色旬陡;

添加輔助View

5拓颓,分別對添加的View設定約束(相對于左側按鈕)為水平居中、等高描孟,另外設置View距離左右兩邊的按鈕約束均為0驶睦;

o與p之間的View的約束

6,選中所有輔助的View匿醒,設置等寬(Equal Widths)即可完成第一排按鈕的約束场航;

7,第二排按鈕約束:a按鈕左=30廉羔,上=10溉痢;I按鈕右=30,上=10。其他約束條件可參考第一排按鈕進行設置孩饼;

8髓削,第三排按鈕約束:shift按鈕.leading=q.leading,shift按鈕.trailing=a.trailing镀娶,top=10立膛,shift按鈕與q等高;z 按鈕.leading=s.leading梯码,z按鈕.trailing=s.trailing宝泵,top=10,z與s等寬轩娶,其他按鈕類似方式設置即可儿奶;

9,第四排按鈕約束:空格按鈕.leading=shift按鈕.leading鳄抒,空格.trailing=n.trailing闯捎,空格.top=10,空格按鈕與shift按鈕等高嘁酿;登錄按鈕類似設置隙券。

注:1男应,符號鍵盤按鈕的約束條件與字符鍵盤按鈕約束設置方法類似闹司,此處不再贅述;

? ? ? 2沐飘,在xib里我是將3個鍵盤View放在一個inputView下游桩,原因是方便在控制器里設置self.pwdTextField.inputView=self.keyboardView.inputView。我自己在設計之初是想將inputView和inputAccessoryView作為一個整體賦值給pwdTextField的inputView耐朴,但是這樣一來鍵盤顯示不全借卧,只能顯示216的高度。

數(shù)字鍵盤按鈕約束設置

要求設置數(shù)字按鈕四周的間距為10(第一排按鈕top設置為8)筛峭,高度為42铐刘,同一排按鈕等寬。

1影晓,選中按鈕1镰吵,2和3,設置左=10挂签,上=8疤祭,右=10,高=42以及等寬饵婆,點擊“Add ?12 Constraints”按鈕勺馆,更新約束:

約束條件設置

2,設置按鈕4的左=10,上=10草穆,右=10灌灾,按鈕4與按鈕1等寬、等高悲柱;按鈕5和6的左紧卒、右、上都為10诗祸,分別設置按鈕5跑芳、按鈕6與按鈕4等寬等高;

3直颅,第三排和第四排按鈕的約束條件設置方法參考步驟2即可博个。

到此就完成了各個鍵盤按鈕的約束條件。

說明:本來設計時是點擊“數(shù)字”按鈕時功偿,數(shù)字鍵盤會重新生成隨機數(shù)盆佣,但是這里操作體驗不好,因為能夠明顯看到數(shù)字重新生成的過程械荷,故我將其處理成只要“字符”或“符號”按鈕是處于選中狀態(tài)共耍,就讓程序在“后臺”默默地調用一次生成隨機數(shù)方法,這樣用戶體驗可能會更好吨瞎。

其他功能的實現(xiàn)在此不再描述痹兜,代碼里都有注釋,任何問題歡迎留言颤诀。

已知缺陷:第一次點擊空格按鈕字旭,按鈕背景色不會變灰。

gitHub地址



最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末崖叫,一起剝皮案震驚了整個濱河市遗淳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌心傀,老刑警劉巖地熄,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件岩齿,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機椿浓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門磷雇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來雳窟,“玉大人表窘,你說我怎么就攤上這事《橛停” “怎么了潘飘?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵肮之,是天一觀的道長。 經(jīng)常有香客問我卜录,道長戈擒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任艰毒,我火速辦了婚禮筐高,結果婚禮上,老公的妹妹穿的比我還像新娘丑瞧。我一直安慰自己柑土,他們只是感情好,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布绊汹。 她就那樣靜靜地躺著稽屏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪西乖。 梳的紋絲不亂的頭發(fā)上狐榔,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天,我揣著相機與錄音获雕,去河邊找鬼薄腻。 笑死,一個胖子當著我的面吹牛届案,可吹牛的內(nèi)容都是我干的庵楷。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼萝玷,長吁一口氣:“原來是場噩夢啊……” “哼嫁乘!你這毒婦竟也來了昆婿?” 一聲冷哼從身側響起球碉,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎仓蛆,沒想到半個月后睁冬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡看疙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年豆拨,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片能庆。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡施禾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出搁胆,到底是詐尸還是另有隱情弥搞,我是刑警寧澤邮绿,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站攀例,受9級特大地震影響船逮,放射性物質發(fā)生泄漏。R本人自食惡果不足惜粤铭,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一挖胃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧梆惯,春花似錦酱鸭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至职烧,卻和暖如春扁誓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蚀之。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工蝗敢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人足删。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓寿谴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親失受。 傳聞我的和親對象是個殘疾皇子讶泰,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 很多項目中都使用自定義鍵盤,實現(xiàn)自定義鍵盤有很多方法拂到,本文講的是修改UITextField/UITextView的...
    鏡像閱讀 1,236評論 0 6
  • 項目中可能需要用到自定義的鍵盤痪署。學習了下找到的2款數(shù)字鍵盤。自定義鍵盤可以通過設置UITextField的inpu...
    談Xx閱讀 2,037評論 2 2
  • 創(chuàng)建Xcode項目 打開Xcode 6以上的版本并創(chuàng)建一個新項目兄旬。工程命名可以根據(jù)個人喜好命名狼犯,這里的工程命名為K...
    Coder_Vance閱讀 7,819評論 8 6
  • 來自產(chǎn)品經(jīng)理的"簡單"需求一則 需求:在輸入身份證號碼的時候,彈出來的鍵盤是能夠切換到字母的九宮格數(shù)字鍵盤领铐。(左邊...
    伊爾今夏閱讀 10,436評論 5 33
  • //宏定義屏幕的寬和高//屏幕寬度 define kwidth self.view.frame.size.widt...
    任任任任師艷閱讀 908評論 0 0