Swift 仿支付寶\微信支付密碼輸入框,可自定義長度

IMG_1851.PNG
重點(diǎn):

輸入框均分 6 小塊兒,無光標(biāo)顯示扳肛,每輸入一次就會出現(xiàn)個圓點(diǎn)傻挂,刪除就會圓點(diǎn)消失

思路:

1、必然是用UITextField挖息,設(shè)置文本內(nèi)容為clearColor金拒,可是textField會顯示光標(biāo)
2、為避免顯示光標(biāo)套腹,所以UITextField上方覆蓋個UIView绪抛,又要響應(yīng)UITextField的firstResponder,所以UIView的userInterfaceEnabled為NO电禀,那樣式幢码,就是在UIview上花很多線條,分成 6 個小格子
3尖飞、UITextField的代理方法蛤育,shouldChangeRange: WithString ,我們可以限制輸入長度
4葫松、在NSNotificationTextDidChange中瓦糕,我們可以監(jiān)聽到文本長度改變,對UIView上要顯示的圓點(diǎn)進(jìn)行繪制腋么,對的咕娄,這里 我用的是UIGraphics 畫上去的圓點(diǎn),每輸入一次進(jìn)行一次重繪制
5珊擂、按照這個思路唯一的一個問題(不明緣由)圣勒,就是我用draw的前提下,用UIView創(chuàng)建的小格子的線條 顯示的不太對摧扇,所以圣贸,只好連線條都是畫上去的

主要代碼:
1、負(fù)責(zé)UI以及相關(guān)UITextField代理的輸入視圖 PwdInputView扛稽,內(nèi)部定義繪制視圖shadeView:PaintView吁峻,響應(yīng)輸入的pwdTf:UITextField, 以及長度限制變量numberLimit: Int! ,創(chuàng)建的代碼我就不寫了,主要是代理和通知的響應(yīng)

//MARK: 文本長度改變用含,對shadeView:PaintView重繪一次矮慕,圓點(diǎn)數(shù)就和輸入長度一致了,輸入完成就通過閉包 typealias FinishInputPWD = (_ inputText:String) -> Void將輸入內(nèi)容帶回
      func textFieldDidChange(){
         self.shadeView.paintPoints(pointsNum: self.pwdTf.text!.characters.count)
//MARK: 輸入完成就回收鍵盤啄骇,閉包帶回輸入內(nèi)容
         if self.pwdTf.text?.characters.count == self.numberLimit{
             self.finishInputPwd(self.pwdTf.text!)
             self.endEditing(true)
          }
    }
    
    //MARK: ---------UITextFieldDelegate--痴鳄,控制輸入
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        let length = textField.text!.characters.count - range.length + string.characters.count
        return length <= self.numberLimit
        
    }

2、負(fù)責(zé)繪制圓點(diǎn)的PaintView

   //MARK: 需要繪制的總個數(shù)缸夹,畫線的時候用
   func totalPoints(pointNum:Int){
        self.points = pointNum
    }
    //MARK:繪制圓點(diǎn)痪寻,參數(shù)pointsNum:需要繪制的個數(shù)
    func paintPoints(pointsNum:Int){
        self.paintNum = pointsNum
        self.setNeedsDisplay()
    }

    //MARK: 初始化的時候會執(zhí)行一次,所以如果此時self.paintNum==0 就表示是初始化虽惭,不進(jìn)行圓點(diǎn)繪制
    override func draw(_ rect: CGRect) {
        super.draw(rect)
        
        let context = UIGraphicsGetCurrentContext()
        
        //設(shè)置填充色
        context?.setFillColor(UIColor.lightGray.cgColor)
        context?.setStrokeColor(UIColor.lightGray.cgColor)
        context?.setLineWidth(0.5)
        //畫分割線
        let eachWidth = tfWidth/Float(self.points)
        
        for i in 1...self.points {
            let leftX = eachWidth * Float(i)
//            let rect = CGRect(x:CGFloat(leftX), y:0, width:0.2,height:CGFloat(tfHeight))
            context?.addLines(between: [CGPoint(x: CGFloat(leftX),y:CGFloat(0)),CGPoint(x: CGFloat(leftX),y:CGFloat(tfHeight))])
            
        }
        context?.strokePath()

        if self.paintNum == 0 {
            return
        }

        //畫密碼點(diǎn) 圓點(diǎn)
        let pointW = tfWidth/Float(self.points)/Float(2.2)
        let pointH = pointW
       
        let y = (tfHeight - pointH)/2.0
        for i in 0...(self.paintNum-1) {
            //計(jì)算原點(diǎn)位置
            let leftX = eachWidth*Float(i) + (eachWidth-pointW)/2.0
            let rect = CGRect(x:CGFloat(leftX), y:CGFloat(y), width:CGFloat(pointW), height:CGFloat(pointH))
            context?.addEllipse(in: rect)
        }
        context?.fillPath()
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末橡类,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子趟妥,更是在濱河造成了極大的恐慌,老刑警劉巖佣蓉,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件披摄,死亡現(xiàn)場離奇詭異,居然都是意外死亡勇凭,警方通過查閱死者的電腦和手機(jī)疚膊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來虾标,“玉大人寓盗,你說我怎么就攤上這事¤岛” “怎么了傀蚌?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蘸吓。 經(jīng)常有香客問我善炫,道長,這世上最難降的妖魔是什么库继? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任箩艺,我火速辦了婚禮,結(jié)果婚禮上宪萄,老公的妹妹穿的比我還像新娘艺谆。我一直安慰自己,他們只是感情好拜英,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布静汤。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪撒妈。 梳的紋絲不亂的頭發(fā)上恢暖,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機(jī)與錄音狰右,去河邊找鬼杰捂。 笑死,一個胖子當(dāng)著我的面吹牛棋蚌,可吹牛的內(nèi)容都是我干的嫁佳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼谷暮,長吁一口氣:“原來是場噩夢啊……” “哼蒿往!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起湿弦,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤瓤漏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后颊埃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蔬充,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年班利,在試婚紗的時候發(fā)現(xiàn)自己被綠了饥漫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡罗标,死狀恐怖庸队,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情闯割,我是刑警寧澤骤铃,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布校坑,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏巩掺。R本人自食惡果不足惜濒持,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一茉继、第九天 我趴在偏房一處隱蔽的房頂上張望谎脯。 院中可真熱鬧,春花似錦澳化、人聲如沸崔步。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽井濒。三九已至灶似,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瑞你,已是汗流浹背酪惭。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留者甲,地道東北人春感。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像虏缸,于是被迫代替她去往敵國和親鲫懒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評論 2 354

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

  • .前言 最簡單的方式實(shí)現(xiàn):支付寶的密碼輸入框.以及常規(guī)的驗(yàn)證碼輸入框 先上效果圖 提供的demo有兩套思路:1.使...
    侭情顯現(xiàn)閱讀 4,907評論 1 3
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫刽辙、插件窥岩、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,098評論 4 62
  • 喊破嗓子,甩開膀子宰缤,擼起袖子颂翼,開動腦子,加油干慨灭!
    碎碎31閱讀 139評論 0 0
  • 大家好朦乏,我是144號星寶寶羅云,正在參加小牛媽媽舉辦的第8期21天寫作訓(xùn)練的蛻變之旅第2天缘挑,這是我第111篇原創(chuàng)日...
    羅文均閱讀 380評論 0 4
  • 起來集歇,不愿起床的寶貝 鬧鐘已經(jīng)響了三四聲啊 上學(xué)時間已經(jīng)快要來到 如果再不起來 那我們就遲到了 起來~ ~ 起來~...
    自由飛翔的我閱讀 294評論 0 0