سؤال

لدي قائمة تحتوي على عنصر لكل قيمة في العادة.

قائمة الطعام:

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

ما هو أنظف وسيلة لسلك هذا؟ لدي أفكاران ولكن كلاهما يضربني غير مرض.

الفكرة الأولى: إنشاء خصائص لكل قيمة (sortMethodIsDueDate, setSortMethodIsDueDate: إلخ) هذه الخصائص ستدعو setTaskSortMethod: و اتصل valueDidChange:@"sortMethodIsDueDate" إلخ. سيتم ربط عناصر القائمة هذه الخصائص. هذا يبدو وكأنه الكثير من العمل.

الفكرة الثانية: قم بتوصيل كل عنصر قائمة -(IBAction)updateSortMethod:(id)sender التي يمكن بعد ذلك تكرار عناصر القائمة وتعيين القيمة حسب sender. وبعد هذا النهج جيد حتى taskSortMethod يتم تغيير قسم مختلف من التعليمات البرمجية عند إضافة رمز النقطة لإضافتها للحفاظ على القائمة في المزامنة مع taskSortMethod.

أنا مئز نحو النهج الأول لأنه لديه فصل أفضل بين V & C.

أي أفكار أفضل؟

هل كانت مفيدة؟

المحلول

أعتقد أنك على الطريق الصحيح مع فكرتك الثانية، ولكن هناك شيء يجب مراعاته:

لا تملك NSMENU / NSMENUITEM مفهوم "البند المحدد" مثل nspopupbutton على سبيل المثال. كنت أستخدم آلية الهدف / الإجراء لتغيير طريقة الفرز وصحة القائمة (مقدمة في التحقق من صحة واجهة المستخدم) أو حتى طريقة المندوب NSMenu -Menu: Updateitem: ATINDEX: KNTCANCEL: (مرجع البروتوكول NSMenudelegate) لتحديث حالة البند بناء على نتيجة -TaskortMethod.

نظرا لأن عناصر القائمة تحتاج إلى تحديث فقط عند إظهارها (التي تقوم به هذه الآلية لك)، فلا داعي للقلق بشأن تحديث عناصر القائمة بنفسك عند تغييرات -Tasksortmethod في مكان آخر.

السابق:

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

IMO، هذا منظفا بكثير من محاولة استخدام المهندسين في حل مدعوم بالطاقة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top