如何限制文本字段只接受双倍值?

问题描述 投票:0回答:1

所以基本上我正在创建一个计算器类型的应用程序,其中我只想摄入数字、小数和负号。我对Xcode和swift相当陌生,所以我不会认为我的知识广泛,当涉及到知道如何处理这些类型的问题。

这是我目前尝试的解决方案

 let v = Double(inputOne.text!)!

(inputOne.是关联的文本字段)

在我的算法中,当所有的东西都按照应该的方式输入时,这个算法工作得很好,但是当输入有效的双数以外的任何东西时,我收到 "Fatal error. Unexpected found nil while unwrapping an Optional value"(致命错误。Unexpected found nil while unwrapping an Optional value", and the app crashes.

我想可能有人已经想出了一个创造性的解决方案来解决这个问题,或者在Xcode中可能有一些命令以这种方式限制文本字段,然而我是Xcode的新手,不知道是否存在这样的东西。也许有什么方法可以让我实现一个错误信息,只要输入的不是有效的双数就会发生,而不会让应用程序崩溃?任何有创意的解决方案都将被感激。

swift xcode fatal-error swift5 xcode11
1个回答
0
投票

你可以使用一个UITextView作为你的输入字段(如果你想要一个单行输入,使用textField)。然后,简单地将你的ViewController设置为textView的委托人--在ViewController中添加以下一行(别忘了继承UITextViewDelegate)。

textView.delegate = self

本质上,这就是允许ViewController拥有textView的一些功能。在本例中,我们对过滤用户输入感兴趣,为此你可以使用以下功能。

/// Intercept whatever character the user is typing on the keyboard
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
    // If the user presses "enter", handle it the way you want
    guard text.rangeOfCharacter(from: CharacterSet.newlines) == nil else {
        // Handle new line
    }
    // If character is a digit, a dot, or a dash, allow input, else reject it.
    if text == "-" || text.rangeOfCharacter(from: CharacterSet.decimalDigits) != nil || text == "." {
        return true
    } else {
        return false
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.