我有这个NSTableView
。一栏。每行只是默认的视图单元格,内部带有NSTextField
。
我想在此文本字段中添加格式化程序,以防止用户键入不是字母或数字的字符。
因此,使用界面构建器,我将自定义格式器拖动到视图控制器,并将文本字段链接到它。
接口构建器说格式化程序是NSFormatter
类型。
我创建了一个名为MyFormatter
的新类,作为NSFormatter
的子类。
Xcode抱怨,说NSFormatter
重命名为Formatter
。
逻辑说我不能将类Formatter
分配给IB说是NSFormatter
的对象。
无论如何,只要我将文本字段链接到格式化程序,应用程序就会崩溃。
我想念什么吗?
我将使用UITextField进行回答。委托在ViewController中使用。这只是向您展示如何完成此操作,通过此答案,我无意为您编写代码。
extension ViewController: UITextFieldDelegate{
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if !string.matches("[0-9]") {
return false
}
return true
}
}
extension String {
func matches(_ regex: String) -> Bool {
return self.range(of: regex, options: .regularExpression, range: nil, locale: nil) != nil
}
}
字符串扩展方法检查给定的字符串是否与正则表达式匹配。每次输入字符时,都会调用UITextFieldDelegate的shouldChangeCharactersIn方法。如果它与正则表达式不匹配(即输入的字符串不是数字),则返回。
这将是一个糟糕的用户体验,但是请从您的角度进行处理。