绑定到具有仅在子类中可用的 Cocoa 绑定的属性



来自WPF的以下问题始终是一件容易的事:

  • 我有一个名为baseClass的类,它有两个子类,称为 子类 A 和子类 B。
  • 我的视图控制器有一个名为 类型的对象 [baseClass] 和名为 selected对象的属性 类型基类。
  • 由于子A类和B类派生自 baseClass,我可以将这两种类型的实例放入数组对象和 selectedObject 属性中。

现在,我将创建一个用于编辑这些类的UI。它包括以下内容:

  • 一个 NSPopupButton,它使用 NSArrayController 来获取对象数组。
  • 一个文本框,用于编辑在 baseClass 中声明的名为 name 的属性。
  • 一个文本框,用于编辑在子类 B 中声明的名为昵称的属性。

我已经实现了在弹出按钮中显示对象数组的内容,并将选择绑定到视图控制器的选定对象。此外,我插入了一个文本字段并连接了所有内容,以便 name 属性正常工作 (self.ViewController.selectedObject.name)。

但是如何将第二个文本字段绑定到 nickName 属性而不会崩溃?由于昵称仅在子类 B 上可用,因此必须执行哪些操作才能使绑定仅在"选择"子类 B 实例时进行评估?是否应该通过隐藏/启用的绑定来切换?

感谢您的帮助!

出于 UI 的目的,创建一个类别/扩展名baseClass。在此扩展中,定义两个计算属性(未经测试,在浏览器中键入):

extension baseClass {
var hasNickName: Bool { return (self as? subClassB) != nil }
var editableNickName: String? {
get { return (self as? subClassB)?.nickName }
set(newName) { (self as? subClassB)?.nickName = newName }
}
}

您可以将视图的启用/可见属性绑定到hasNickName并将任何值绑定到editableNickName,这对于subClassB的对象是有用的,但对于baseClass对象是无用的属性。

最新更新