首页 > 解决方案 > 使用自定义格式化程序应用字符串后缀

问题描述

使用Swift'sFormatter类时,可以选择格式样式(能量、长度、质量等),该样式将显示在字段的末尾,如下例所示:

我正在使用Eureka框架构建一个表单并尝试达到相同的效果,但将“cal”后缀替换为“hours”。

所以最终的结果应该是“10小时”。

我正在使用IntRow仅接受 Int 值的 Eureka。

经过一番搜索,我设法找到了一种方法来使用自定义格式化程序来实现这一点,该格式化程序可以分配给IntRow,但它并没有完全工作。当我尝试更改字段的值时,该字段变为空且没有值。

自定义格式化程序代码:

class NumberSuffixFormatter: Formatter {

    var suffix: String!

    init(suffix: String = "") {
        self.suffix = suffix
        super.init()
    }

    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    override func string(for obj: Any?) -> String? {
       if let intValue = obj as? Int {
            return "\(intValue) hours"
        }
        return nil
    }

    override func getObjectValue(_ obj: AutoreleasingUnsafeMutablePointer<AnyObject?>?, for string: String, errorDescription error: AutoreleasingUnsafeMutablePointer<NSString?>?) -> Bool {

        obj?.pointee = string as AnyObject

        return true
    }
}

IntRow代码:

<<< IntRow() {
    let formatter = NumberSuffixFormatter(suffix: " hours")
    $0.value = 10
    $0.formatter = formatter
    $0.useFormatterDuringInput = true
}

标签: iosswiftiphonexcodeeureka-forms

解决方案


推荐阅读