【发布时间】:2017-04-17 12:09:24
【问题描述】:
好的,这里是 Swift 菜鸟。浏览一些初学者教程。
为了实现某个目标,
我需要一个 UITextField 来只接受数字
我已经设法让 UITextField 通过此代码只接受字母:
import UIKit
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet var TextField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
self.TextField.delegate = self
}
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let allowedCharacters = CharacterSet.letters
let characterSet = CharacterSet(charactersIn: string)
return allowedCharacters.isSuperset(of: characterSet)
}
}
但是,一旦我将 allowedCharacters 变成类似的东西:
let allowedCharacters = CharacterSet(charactersIn: "0123456789")
Simulator 仍然成功启动(我收到了 Build Succeeded 消息)
但是,一旦我开始输入,它就会崩溃。然后 Xcode 突出显示我的 return 语句并显示错误消息:
Thread 1: EXC_BAD_ACCESS (code=EXC_i386_GPFLT)
当我用谷歌搜索它时,我觉得这可能与我可能需要在我的函数某处使用 if-statement 来捕获任何我猜想一旦我返回的意外值有关开始在文本字段中输入,但我还看不到关于在哪里以及如何进行的逻辑。
任何能启发我的想法都会很棒!
PS:我知道我也可以将我的文本字段配置为仅显示数字键盘,但我仍然想知道为什么当前的解决方案会导致问题,因为我可能需要其他更高级的解决方案, 未来某个时候的限制。
编辑
另一个可行的解决方案(我在发布问题后发现)是这样更改我对 allowedCharacters 的声明:
let allowedCharacters = CharacterSet.decimalDigits
但是,此问题的公认答案允许在必要时进行更多微调。
【问题讨论】:
-
你为什么不用
number keyboard? -
@SB87 : JuicyFruit 是绝对正确的。你为什么不使用数字键盘..?它只允许输入数字。
-
@JuicyFruit & anilkukdeja:请参阅我最初问题的 PS。我怀疑我将来会需要更高级的选择,所以现在可以使用小键盘,但我还需要了解如何强制执行其他选择。
标签: swift error-handling uitextfield runtime-error