格式化程序不接受类,格式化程序属于错误的类,格式化程序导致应用程序崩溃

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

我有这个NSTableView。一栏。每行只是默认的视图单元格,内部带有NSTextField

我想在此文本字段中添加格式化程序,以防止用户键入不是字母或数字的字符。

因此,使用界面构建器,我将自定义格式器拖动到视图控制器,并将文本字段链接到它。

接口构建器说格式化程序是NSFormatter类型。

我创建了一个名为MyFormatter的新类,作为NSFormatter的子类。

Xcode抱怨,说NSFormatter重命名为Formatter

逻辑说我不能将类Formatter分配给IB说是NSFormatter的对象。

无论如何,只要我将文本字段链接到格式化程序,应用程序就会崩溃。

我想念什么吗?

swift cocoa nstextfield formatter nsformatter
1个回答
0
投票

我将使用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方法。如果它与正则表达式不匹配(即输入的字符串不是数字),则返回。

这将是一个糟糕的用户体验,但是请从您的角度进行处理。

© www.soinside.com 2019 - 2024. All rights reserved.