资讯专栏INFORMATION COLUMN

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

silencezwm / 3268人阅读

摘要:如果光标的位置移动,则输入的位置可能会发生变化,添加删除的黑点就会错乱。代码如下设置提现密码条竖线文本输入状态显示黑点文本删除状态移除黑点

几个关键点: 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, width: SCREEN_WIDTH-40, height: 40))
        if (SCREEN_WIDTH > 320) {
            passworldTF.frame = CGRect.init(x: 30, y: tipLabel.bottom()+10, 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, y: 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, y: 0, 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
    }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/16748.html

相关文章

  • 界面工具 - 收藏集 - 掘金

    摘要:上列表左右滑动开源组件掘金是一款用于为上的排布提供左滑右滑操作的库。这里我贴出最终的兼容方案教你用两层嵌套实现三级展示界面掘金最近项目中使用一个三级展示列表,要求第一级和第二季都可以折叠,并有不同的图标变换,第三层展示数据,可点击。 八年 Android 开发,看我如何简化 Android 的 UI 开发! - Android - 掘金作者 : Super Mary 校对者: Zhao...

    wuaiqiu 评论0 收藏0
  • iOS高仿微信悬浮窗、忍者小猪游戏、音乐播放器、支付宝、今日头条布局滚动效果等源码

    摘要:本文内容就是这些苹果开发者的红宝书,包含变量,集合,函数,类等等。据统计,有十种应用性能问题危害最大,分别为连接超时闪退卡顿崩溃黑白屏网络劫持交互性能差使用率问题内存泄露不良接口。里包含一个微博的列表发布视图,还包含一个的列表。 iOS精选源码 iOS WKWebView的使用源码 showImg(https://segmentfault.com/img/remote/14600000...

    newtrek 评论0 收藏0
  • iOS天气动画、高仿QQ菜单、放京东APP、高仿微信、推送消息等源码

    摘要:它们有阅读原文从源码探索的实现原理对于重复的,其多次触发的时刻不是一开始算好的,而是触发后计算的。设置了的,对于和系统,实质上会采用的形式注册到内核中,触发后,再由处理其回调逻辑阅读原文更多源码更多博文 iOS精选源码 TYCyclePagerView iOS上的一个无限循环轮播图组件 showImg(https://segmentfault.com/img/remote/146000...

    cod7ce 评论0 收藏0
  • ios精品源码,仿微对话框弹窗父类swift椭圆Cell进度动画下载源码

    摘要:仿微信提醒对话框下拉刷新,上拉加载封装一个可以复用的弹窗父类新版自定义宽点椭圆,图片等全功能裁剪图片简单易扩展,代码尽量封装商品好评,进度动画版变换颜色音频组件一行代码实现下载任务 仿微信提醒对话框 showImg(https://segmentfault.com/img/remote/1460000012034037?w=640&h=1136); 下拉刷新,上拉加载 GSRefres...

    CloudDeveloper 评论0 收藏0
  • fir.im Weekly - iOS 保持界面流畅的技巧

    摘要:保持界面流畅的技巧的这篇文章非常详细地分析界面构建中的各种性能问题以及对应的解决思路,同时给出一个开源的微博列表实现,通过实际的代码展示如何构建流畅的交互。仿微信界面由分享。是的一个开源项目,仿微信界面,可滑动,自定义图片选择器。 生命不息,coding 不止。本期 fir.im Weekly 收集了微博上的热转资源,包含 Android、iOS 开发工具、源码分享,产品 UI 设计的...

    NervosNetwork 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<