【问题标题】:How can I limit a text field to only intaking Double values如何将文本字段限制为仅输入 Double 值
【发布时间】:2020-09-09 22:43:05
【问题描述】:
所以基本上我正在创建一个计算器类型的应用程序,我只想在其中输入数字、小数和负号。我对 Xcode 和 swift 还很陌生,所以在了解如何处理这些问题时,我不会认为我的知识很丰富。
这是我目前的解决方案尝试
let v = Double(inputOne.text!)!
(inputOne. 是关联的文本字段)
当所有内容都按原样输入时,这在我的算法中运行良好,但是当输入有效双精度以外的任何内容时,我收到“致命错误:在展开可选值时意外发现 nil”,并且应用程序崩溃。
我想有人可能已经想出了一个创造性的解决方案来解决这个问题,或者 Xcode 中可能有一些命令以这种方式限制文本字段,但是我是 Xcode 的新手并且不知道这些东西是否存在。也许有某种方法可以实现在输入有效双精度以外的其他内容时出现的错误消息,而不会导致应用程序崩溃?任何创造性的解决方案将不胜感激。
【问题讨论】:
标签:
swift
xcode
fatal-error
swift5
xcode11
【解决方案1】:
您可以使用 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
}
}