-1

我有一个NSSearchField用户可以输入带小数的数字来搜索数据的地方。我在使用 aNumberFormatter显示正确格式时遇到问题。

我在 IB 中添加了这个:

在此处输入图像描述

发生的情况是,只要用户输入小数点(或任何本地字符),该字段就会变为空。当我输入一个字母时也会发生同样的情况(这是预期的),所以小数点似乎被拒绝,就好像它是一个字母一样。当然,不是我想要的。

在图片中间尝试了这些复选框的许多不同组合(包括“生成十进制数”),但无法使其正常工作。

如果您查看图片底部的示例,那看起来还可以。

代码中没有任何东西可以操纵搜索字段。

4

1 回答 1

1

我终于通过完全删除格式化程序并仅将字符串过滤到controlTextDidChange. 请注意,这适用于NSTextFieldNSSearchField

class ViewController: NSViewController {
    @IBOutlet var searchField: NSSearchField! // delegate is set in SB

    lazy var decimalCharacterSet: CharacterSet = {
        var charSet = CharacterSet.init(charactersIn: "0123456789")

        charSet.insert(charactersIn: Locale.current.decimalSeparator!)

        return charSet
    }()
}

extension ViewController: NSControlTextEditingDelegate {
    func controlTextDidChange(_ notification: Notification) {
        if let textField = notification.object as? NSTextField {
            // first filter out all the non-numbers
            let chars = textField.stringValue.components(separatedBy: decimalCharacterSet.inverted)
            var result = chars.joined()

            // now check if there are more than one decimal separators
            let count = result.filter { $0 == Character(Locale.current.decimalSeparator!) }.count

            // if so, remove the last character in the string, this is what has just been typed.
            if count > 1 {
                result = String(result.dropLast())
            }

            // finally, assign the filtered string back to the textField
            textField.stringValue = result
         }
    }
}
于 2019-11-11T23:26:32.410 回答