首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实现用于短信验证码的UITextField布局/设计?

如何实现用于短信验证码的UITextField布局/设计?
EN

Stack Overflow用户
提问于 2018-02-01 14:29:24
回答 4查看 7.1K关注 0票数 5

我正在尝试实现短信验证码的以下功能。我将如何实现它?在研究了Github中的一堆库之后,没有一个库与行业中广泛使用的这种设计足够相似。

我试着用6个文本字段实现它,但发现了很多问题,除了第一个文本字段用于初始输入之外,阻塞了所有的文本字段,firstResponder的迟缓移动等等,是什么让我怀疑拥有6个文本字段是否真的是最好的方法。

绕过边界是小菜一碟。最难的部分是功能(即光标平滑移动,来回移动,当输入错误时使它们全部变红,等等)

你们觉得怎么样?我如何才能实现这样的行为/功能?

EN

回答 4

Stack Overflow用户

发布于 2018-02-01 14:55:47

试试下面的代码。(目前包含4个UITextField,请根据需要修改)

代码语言:javascript
复制
extension ConfirmationCodeViewController: UITextFieldDelegate {

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        if !(string == "") {
            textField.text = string
            if textField == txtFirst {
                txtSecond.becomeFirstResponder()
            }
            else if textField == txtSecond {
                txtThird.becomeFirstResponder()
            }
            else if textField == txtThird {
                txtForth.becomeFirstResponder()
            }
            else {
                textField.resignFirstResponder()
            }
            return false
        }
        return true
    }

    func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
        if (textField.text?.count ?? 0) > 0 {

        }
        return true
    }
}
票数 7
EN

Stack Overflow用户

发布于 2020-01-10 17:25:16

尝试此操作(确保已添加textField标记并且已连接委派)

代码语言:javascript
复制
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    if (string != "") {
        
        if (textField.text == "") {
            textField.text = string
            let nextResponder: UIResponder? = view.viewWithTag(textField.tag + 1)
            if (nextResponder != nil) {
                nextResponder?.becomeFirstResponder()
            }
        }
        return false
    } else {
        
        textField.text = string

        let nextResponder: UIResponder? = view.viewWithTag(textField.tag - 1)
        if (nextResponder != nil) {
            nextResponder?.becomeFirstResponder()
        }
        return false
    }
}
票数 3
EN

Stack Overflow用户

发布于 2018-02-01 20:21:32

请看一下这个git集线库...

PinCodeTextField

您还可以自定义输入文本字段的数量。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48556617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档