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

3

我希望用户在文本框中填写0到60之间的数字。 如何限制数字字符数为2? 如何将最大数字限制为60? 如何取消文本框上的“粘贴”选项,以便用户无法粘贴字母?


这是用于禁用复制/粘贴的代码:https://dev59.com/Y2w15IYBdhLWcg3wT55c - Duyen-Hoa
@HoaParis 这是 Objective-C 的代码,请问你能提供 Swift 版本吗? - Eliko
3个回答

9
我认为有两种方法可以实现这个。一种方法是实现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的内容,将其转换为整数,如果新值高于60,则返回false。(同时向用户显示适当的错误信息)。

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


我更喜欢使用文本框来编写代码,但是你能继续编写代码吗?我不明白在你的代码之后需要做什么。 - Eliko
这就是答案!太好了!如果我有两个文本字段,你知道我需要做什么吗? - Eliko
假设你有两个文本字段,分别是ageTextField和heightTextField。 函数中收到的第一个参数是textField对象。 在最上方设置检查条件: 如果(textField == ageTextField),则执行你的代码。 - Shamas S

0

使用textfield的代理方法

其中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
 }

如果在最新版本的 Swift 中 countElements 无法正常工作,请使用 count 替代它。

0

禁用复制和粘贴:

func canPerformAction(_ action: Selector, withSender sender: AnyObject?) -> Bool
{
    if action == "paste:"
        {return false}
    return super.canPerformAction(action,withSender:sender)
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接