一尘不染

在Swift中将用户输入限制为有效的十进制数字

swift

我已经找到了很多关于如何在Objective-C中执行此操作的指南,但是我希望看到一种更加面向Swift的方法。

我有一个UITextField,用户可以在其中输入货币价格。文本字段将调用小数键盘。但是,在iPad上,出现的键盘具有整个范围的非十进制符号。

基本上,对于每一次按键,我都希望不可能在该字段中键入非数字或超出单个小数的任何内容。如果键入了一个十进制,我想使其不可能输入第二个十进制。如果删除了小数点,我想确保用户可以再次输入小数点。

关于如何迅速正确地执行此操作的任何想法?

但是我不知道该在哪里放置这些函数或如何调用它们。每当我尝试在参数中放入NSRange时,都会收到错误消息,提示我未正确创建范围。


阅读 289

收藏
2020-07-07

共1个答案

一尘不染

这是一个简单的示例:

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet weak var textField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.textField.delegate = self

    }

    //Textfield delegates
    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { // return NO to not change text

        switch string {
        case "0","1","2","3","4","5","6","7","8","9":
            return true
        case ".":
            let array = Array(textField.text)
            var decimalCount = 0
            for character in array {
                if character == "." {
                    decimalCount++
                }
            }

            if decimalCount == 1 {
                return false
            } else {
                return true
            }
        default:
            let array = Array(string)
            if array.count == 0 {
                return true
            }
            return false
        }
    }
}
2020-07-07