ما هي أنظف طريقة لربط الخصائص المرفعة؟
-
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;
ما هو أنظف وسيلة لسلك هذا؟ لدي أفكاران ولكن كلاهما يضربني غير مرض.
الفكرة الأولى: إنشاء خصائص لكل قيمة (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، هذا منظفا بكثير من محاولة استخدام المهندسين في حل مدعوم بالطاقة.