我有一个菜单,其中有一个项目为每一个值在枚举。

菜单:

[ ] 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;

什么是最清洁的方式线的这?我有两个想法,但两者的罢工我不能令人满意的。

1想法:创造性对于每个价值(sortMethodIsDueDate, setSortMethodIsDueDate: 等等)这些属性会打电话 setTaskSortMethod: 和呼叫 valueDidChange:@"sortMethodIsDueDate" 等等。菜单的项目将结合这些特性。这似乎是一个很大的工作。

2想法:连接每个单项目来 -(IBAction)updateSortMethod:(id)sender 这可以再循环的菜单项和设定的价值取决于 sender.这种方法是好直到 taskSortMethod 是通过改变不同部分的码在这一点上,代码需要加以保持在同步 taskSortMethod.

我倾向于第一种办法,因为它具有更好的之间的分离V&C。

什么好主意吗?

有帮助吗?

解决方案

我想你是正确的轨道上你的第二个想法,但还有一些考虑:

NSMenu/NSMenuItem没有一个概念的"选择的项目"等NSPopUpButton的实例。我会使用的目标/行动机制,以改变排序方法和菜单的验证(介绍用户的接口验证)或甚至NSMenu委托方法-菜单:执:atIndex:shouldCancel:(NSMenuDelegate协议参考)更新的国家项目的基于结果的taskSortMethod.

由于该项目的菜单,只需要更新时,他们所示(这种机制不会为您),你不必担心更新的菜单项自己的时候-taskSortMethod变化的其他地方。

例如:

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

海事组织,这是一个很清洁比试图在工程绑定供电的解决方案。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top