Question

I ai un menu qui présente un élément pour chaque valeur dans un enum.

Le menu:

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

Le ENUM:

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

La propriété:

@property(readwrite, assign) CWTaskSortMethod taskSortMethod;

Quelle est la façon la plus propre au fil de ça? J'ai deux idées, mais les deux me paraissent pas satisfaisantes.

1ère idée: Créer des propriétés pour chaque valeur (sortMethodIsDueDate, setSortMethodIsDueDate: etc.) Ces propriétés appelleraient setTaskSortMethod: et appeler valueDidChange:@"sortMethodIsDueDate" etc. Les éléments du menu seraient alors se lier à ces propriétés. Cela semble être beaucoup de travail.

2ème idée: Connectez chaque élément de menu à -(IBAction)updateSortMethod:(id)sender qui pourrait alors itérer les éléments de menu et définissez la valeur en fonction de sender. Cette approche est bien jusqu'à ce que taskSortMethod est modifié par une autre section du code à quel code de point doit être ajouté pour maintenir le menu en phase avec taskSortMethod.

Je penche vers la première approche car il a une meilleure séparation entre le V & C.

Les meilleures idées?

Était-ce utile?

La solution

Je pense que vous êtes sur la bonne voie avec votre deuxième idée, mais il y a quelque chose à considérer:

NSMenu / NSMenuItem n'ont pas un concept de « élément sélectionné » comme NSPopUpButton par exemple. J'utilise le mécanisme cible / action pour changer la méthode de tri et de validation menu ( introduction à l'interface utilisateur validation ) ou encore la méthode déléguée NSMenu -menu: updateItem: atIndex: shouldCancel: ( NSMenuDelegate Protocole de référence ) pour mettre à jour l'état de l'élément en fonction du résultat de -taskSortMethod.

Étant donné que les éléments de menu ne doivent être mis à jour quand ils sont présentés (ce mécanisme qui fait pour vous), vous n'avez pas à vous soucier de la mise à jour des éléments de menu vous-même lorsque -taskSortMethod change ailleurs.

Ex:

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

OMI, c'est beaucoup plus propre que d'essayer de trop concevoir une solution à propulsion liaisons.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top