什么是最清洁的方式来结合所列举的性质?
-
16-09-2019 - |
题
我有一个菜单,其中有一个项目为每一个值在枚举。
菜单:
[ ] 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) ];
海事组织,这是一个很清洁比试图在工程绑定供电的解决方案。
不隶属于 StackOverflow