gpt4 book ai didi

cocoa - 绑定(bind) NSPopupButton 的选定标识符

转载 作者:行者123 更新时间:2023-12-03 17:18:33 25 4
gpt4 key购买 nike

我有几个弹出按钮,其选定的标签保存在用户默认值中(通过在绑定(bind)检查器中绑定(bind)选定的标签)。现在,我不想保存一个整数,而是想保存一个字符串值(原因很简单,它使用户默认值更“可读”并且更安全),但遗憾的是没有找到绑定(bind)弹出按钮的选定标识符的方法。这个问题有解决办法吗?

最佳答案

NSPopupButton 的绑定(bind)可能有点令人困惑。各种 Content* 绑定(bind)用于为按钮提供可能的选择列表。 Content 本身用于提供由弹出按钮中的项目表示的对象列表。 内容值用于提供弹出按钮中显示的实际值。例如,Content 可能绑定(bind)到模型对象数组,而 Content Values 绑定(bind)到这些对象上的特定键路径,例如 name,因为您想在弹出按钮本身中显示每个项目的 name 属性的值。

同样,选择的绑定(bind)也对应于这个系统。 选定对象意味着当选择给定项目时,将在绑定(bind)属性上选择/设置Content数组中的底层完整对象,而不仅仅是简单显示的字符串(或数字等)值。另一方面,Selected Value 确实只会绑定(bind)显示的值。

总的来说,在您没有使用内容绑定(bind)的情况下,这意味着您有两个选择:

  1. 选定值绑定(bind)到用户默认值。
  2. 创建一个具有 identifier 属性和 name(或任何您想要的名称)属性的基础模型类。将 Content 绑定(bind)绑定(bind)到这些对象的数组,并将 Content Values 绑定(bind)绑定(bind)到 thatArray.name

选项 1

这个选项要简单得多。只需设置所选值绑定(bind)即可完成。它的主要缺点是实际显示的字符串是存储在用户默认值中的内容。这意味着,如果您更改某个项目的措辞,则之前存储的选择将不会恢复,即使它直接对应于新措辞的项目。更重要的是,让本地化(或潜在本地化)字符串在语义上变得重要并不是一个好主意。

选项 2

这需要更多的工作(和代码),但它会以稳健的“正确”方式解决您的问题。例如:

@objcMembers class Option: NSObject {
dynamic var name: String
dynamic var identifier: String

init(name: String, identifier: String) {
self.name = name
self.identifier = identifier
}
}

class ViewController: UIViewController {
@objc dynamic var optionsForPopup = [Option(name: "Item A", identifier: "id 1"),
Option(name: "Item B", identifier: "id 2"),
Option(name: "Item C", identifier: "id 3")]
}

绑定(bind):

  • Content 到 ViewController - optionsForPopup
  • 内容值到ViewController - optionsForPopup.name
  • 选定值到共享用户默认 Controller - Controller 键:,模型键路径:WhateverUserDefaultsKeyYouWant

示例

我在这里创建了一个实现选项 2 的示例项目:https://github.com/armadsen/PopupDemo

关于cocoa - 绑定(bind) NSPopupButton 的选定标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58815717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com