仿微信--提现密码设置页 swift

几个关键点:

1.为什么用UITextField.leftView

避免了长按会出现放大镜(虽然可以重写UITextField的方法禁止复制、粘贴、选择的功能,但是不能避免移动光标的位置。)如果光标的位置移动,则输入的位置可能会发生变化,添加删除的黑点就会错乱。

2.为什么进入页面直接显示键盘

在 viewWillAppear 的时候`self.textField.becomeFirstResponder(),因为点击leftView上是不会弹出键盘的。

3.如何添加删除黑点?

这里需要定义一个全局的数组,添加删除UIView。

代码如下:

func showViewOne() {
        
        viewOne = UIView.init(frame: CGRect.init(x: 0,y: 0,width: SCREEN_WIDTH,height: SCREEN_HEIGHT))
        viewOne.backgroundColor = bgColor
        self.view.addSubview(viewOne)
        
        
        let tipLabel = UILabel.init(frame: CGRect.init(x: 20,y: SCREEN_HEIGHT/3-50,width: SCREEN_WIDTH-40,height: 40))
        tipLabel.text = "设置提现密码"
        tipLabel.textColor = UIColor.black
        tipLabel.textAlignment = NSTextAlignment.center
        tipLabel.font = UIFont.init(name: FONT,size: 16)
        viewOne.addSubview(tipLabel)
        
        passworldTF = UITextField.init(frame: CGRect.init(x: 20,y: tipLabel.bottom()+10,height: 40))
        if (SCREEN_WIDTH > 320) {
            passworldTF.frame = CGRect.init(x: 30,width: SCREEN_WIDTH-60,height: 50)
        }
        passworldTF.backgroundColor = UIColor.white
        passworldTF.layer.borderWidth = 1
        passworldTF.layer.borderColor = lineColor.cgColor
        passworldTF.keyboardType = UIKeyboardType.numberPad
        passworldTF.tintColor = UIColor.clear
        passworldTF.textColor = UIColor.clear
        passworldTF.delegate = self
        passworldTF.leftView = UIView.init(frame: CGRect.init(x: 0,width: passworldTF.width(),height: passworldTF.height()))
        passworldTF.leftviewmode = UITextFieldviewmode.always
        viewOne.addSubview(passworldTF)
        
        let lineSpaceWidth = passworldTF.width() / 6
        
        //5条竖线
        var i = 1
        for _ in 1...5 {
            let xLine = CGFloat(i)*lineSpaceWidth
            let lineView = UIView.init(frame: CGRect.init(x: xLine,width: 0.5,height: passworldTF.height()))
            lineView.backgroundColor = lineColor
            passworldTF.addSubview(lineView)
            i = i + 1
        }
        
    }
    
        func textField(_ textField: UITextField,shouldChangeCharactersIn range: NSRange,replacementString string: String) -> Bool {
        
        if (textField == self.passworldTF) {
            if (range.location >= 6) {
                return false
            } else {
                
                if (range.length == 0) { //文本输入状态
                    let pointX = ((passworldTF.width()-62.5) / 12) * CGFloat(range.location * 2 + 1) + CGFloat(range.location) * 10.5
                    let pointY = (passworldTF.height()-10) / 2
                    //显示黑点
                    let blackPoint = UIView.init(frame: CGRect.init(x: pointX,y: pointY,width: 10.0,height: 10.0))
                    blackPoint.layer.cornerRadius = 5
                    blackPoint.backgroundColor = UIColor.black
                    passworldTF.addSubview(blackPoint)
                    pointViewArr.append(blackPoint)
                } else {  //文本删除状态
                    //移除黑点
                    pointViewArr[range.location].removeFromSuperview()
                    pointViewArr.remove(at: range.location)
                }
                
                if string == "" {
                    let word = self.password.substring(with: NSMakeRange(0,range.location))
                    self.password = word as NSString
                } else {
                    self.password = self.password.appending(string) as NSString
                }
                
                print(self.password)
                return true
            }
        }
        return true
    }

相关文章

Swift 正式开源!Swift 团队很高兴宣布 Swift 开始开源新篇章。自从苹果发布 Swfit 编程语言,就成为了...
快,快,快!动动您的小手,分享给更多朋友! 苹果去年推出了全新的编程语言Swift,试图让iOS开发更简单...
开发者(KaiFaX) 面向开发者、程序员的专业平台! 和今年年初承诺的一样,苹果贴出了Swift语言的源码,...
本文由@Chun发表于Chun Tips :http://chun.tips/blog/2014/12/11/shi-yong-swift-gou-jian-zi-ding-yi...
本文由CocoaChina译者leon(社区ID)翻译 原文:THE RIGHT WAY TO WRITE A SINGLETON 在之前的帖子里聊过...
本文由CocoaChina译者leon(社区ID)翻译 原文:THE RIGHT WAY TO WRITE A SINGLETON 在之前的帖子里聊过...