gpt4 book ai didi

cocoa - 绑定(bind)枚举属性最简洁的方法是什么?

转载 作者:行者123 更新时间:2023-12-03 16:39:42 26 4
gpt4 key购买 nike

我有一个菜单,其中包含枚举中每个值的项目。

菜单:

[ ] Sort by Due Date
[ ] Sort by Priority
[√] Sort by Title

枚举:

typedef enum  CW_TASK_SORT_METHOD {
CWTaskSortMethodDueDate,
CWTaskSortMethodPriority,
CWTaskSortMethodTitle
} CWTaskSortMethod;

属性:

@property(readwrite, assign) CWTaskSortMethod taskSortMethod;

最简洁的连接方法是什么?我有两个想法,但都令我不满意。

第一个想法:为每个值创建属性(sortMethodIsDueDatesetSortMethodIsDueDate: 等)这些属性将调用 setTaskSortMethod: 并调用 valueDidChange:@"sortMethodIsDueDate" 等。然后菜单项将绑定(bind)到这些属性。这看起来工作量很大。

第二个想法:将每个菜单项连接到 -(IBAction)updateSortMethod:(id)sender,然后它可以迭代菜单项并根据 sender 设置值。这种方法很好,直到 taskSortMethod 被不同的代码部分更改,此时需要添加代码以保持菜单与 taskSortMethod 同步。

我倾向于第一种方法,因为它在 V 和 C 之间有更好的分离。

还有更好的想法吗?

最佳答案

我认为你的第二个想法是正确的,但有一些事情需要考虑:

NSMenu/NSMenuItem 没有像 NSPopUpButton 这样的“所选项目”的概念。我会使用目标/操作机制来更改排序方法和菜单验证( Introduction to User Interface Validation ),甚至 NSMenu 委托(delegate)方法 -menu:updateItem:atIndex:shouldCancel: ( NSMenuDelegate Protocol Reference )来更新基于项目的状态关于 -taskSortMethod 的结果。

由于菜单项仅在显示时才需要更新(此机制为您所做的),因此当 -taskSortMethod 在其他地方更改时,您不必担心自己更新菜单项。

例如:

[sortByDueDateMenuItem setState: ([self taskSortMethod] == CWTaskSortMethodDueDate) ];

IMO,这比尝试过度设计绑定(bind)驱动的解决方案要干净得多。

关于cocoa - 绑定(bind)枚举属性最简洁的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1676421/

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