在 Swift 中添加 ValueTransformer

问题描述 投票:0回答:2

我想将 ValueTransformer 添加到可可绑定中。 我创建了一个 ValueTransformer 类,但它在 IB 中不可见。 当在 IB 中添加为 ValueTransformer 时,应用程序将在启动时崩溃

class myTransformer: ValueTransformer {

    override func valueClassForBinding(_ binding: String) -> AnyClass? {
        return NSString.self
    }
    
    override func transformedValue(_ value: Any?) -> Any? {
        return "test"
    } 
    
}

找不到名为 myTransformer 的值转换器

我错过了什么吗?

swift xcode cocoa binding
2个回答
2
投票

首先,将您的值转换器名称注册到 NSValueTransformerName。

extension
NSValueTransformerName {
    static let myTransformerName = NSValueTransformerName( rawValue: "myTransformer")
}

然后在程序的最开始注册你的值转换器,即AppDelegate的初始化程序。

@NSApplicationMain class
AppDelegate: NSObject, NSApplicationDelegate {
    override
    init() {
        super.init()
        ValueTransformer.setValueTransformer( myTransformer(), forName: .myTransformerName )
    }
}

https://developer.apple.com/documentation/foundation/valuetransformer


0
投票

您需要在初始化代码中将值转换器类添加到控制器类中。 然后您将在界面生成器中的正确位置找到您的值转换器。它将立即显示在 Interface Builder 中,如下所示:

您需要以正确的方式编写值转换器。 看看这个

enter image description here

文档:

值转换器通常由应用程序的委托类注册,以响应接收初始化:类消息。这允许在应用程序启动过程的早期进行注册,从而在加载 nib 文件时提供对值转换器的访问。

希望有帮助。

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