如何限制 Swift 中文本字段中的数字?

Posted

技术标签:

【中文标题】如何限制 Swift 中文本字段中的数字?【英文标题】:How to limit the numbers in the text field in Swift? 【发布时间】:2015-04-10 16:31:51 【问题描述】:

我希望用户在文本字段中填写一个从 0 到 60 的数字。 如何将数字字符限制为 2? 如何将最大数量限制为 60? 以及如何取消文本字段上的“粘贴”选项,使用户无法粘贴字母?

【问题讨论】:

这是用于禁用复制/粘贴:***.com/questions/6701019/… @HoaParis 这是Objective-C,你能用swift提供吗? 【参考方案1】:

我认为有两种方法可以做到这一点。

实现UITextFieldDelegate并实现函数

func textField(textField: UITextField,
    shouldChangeCharactersInRange range: NSRange,
    replacementString string: String) -> Bool 

    var startString = ""

    if textField.text != nil 
        startString += textField.text!
    

    startString += string

    var limitNumber = startString.toInt()

    if limitNumber > 60 
        return false
     else 
        return true
    

在此每次检查到目前为止已输入到UITextField 的内容,转换为Integer,如果新值高于60,则返回false。 (同时向用户显示相应的错误)。

我认为更好的方法是提供UIPickerView

【讨论】:

我更喜欢文本字段的代码,但您能继续编写代码吗?在你的代码之后我没有得到我需要做的事情。 这就是答案!伟大的!如果我有 2 个文本字段,你知道我需要做什么吗? 假设您有 2 个 textField,ageTextField 和 heightTextField。函数中接收到的第一个参数是 textField 在上面你把检查 if (textField == ageTextField) 并执行你的代码。【参考方案2】:

使用文本字段的委托方法

其中 10 是文本字段的最大限制...

      func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool 
        let newLength = countElements(textField.text) + countElements(string) - range.length
       return newLength <= 10 // Bool
 

如果 countElements 在最新版本的 s 中不起作用 wift 使用 count 而不是 countElements。

【讨论】:

【参考方案3】:

禁用复制和粘贴:

func canPerformAction(_ action: Selector, withSender sender: AnyObject?) -> Bool

    if action == "paste:"
        return false
    return super.canPerformAction(action,withSender:sender)

【讨论】:

以上是关于如何限制 Swift 中文本字段中的数字?的主要内容,如果未能解决你的问题,请参考以下文章

如何在swift ui watch os中的同一屏幕中添加键盘和文本字段[关闭]

当用户以编程方式单击swift ios中的删除按钮时,如何将光标从一个文本字段自动移动到另一个文本字段?

仅在两个文本字段之一中的 Ipad 数字

如何自动清除文本字段

如何在 Swift 中编辑或更新文本字段中的文本?

限制文本输入字段中的字符集