2010-01-18 19 views
8

Khi cố gắng tìm hiểu các nguyên tắc cơ bản về xử lý menu. Bảng thanh menu của ứng dụng thử nghiệm của tôi có 3 menu - cụ thể là "TestApp", "Tệp" và "Trợ giúp". Tôi thấy rằng tôi có thể xóa hoàn toàn các menu này, chỉ cần gọi điện thoại:Tắt/bật mục menu ứng dụng

NSMenu* rootMenu = [NSApp mainMenu]; 
[rootMenu removeItemAtIndex:2]; 

Tuy nhiên, tôi chỉ muốn tạm thời vô hiệu hóa chúng (chuyển thành màu xám). Có cách nào đơn giản như nhau để làm điều này không?

Trả lời

7

Tôi có thể hiểu nhầm câu hỏi của bạn, nhưng có vẻ như bạn muốn có thể làm nổi bật tiêu đề thực của menu xuất hiện với thanh menu của hệ thống (Chẳng hạn như menu "Tệp" màu xám). Tôi không chắc chắn nếu nó thậm chí còn có thể, nhưng chắc chắn nó đi ngược lại các Apple Human Interface Guidelines: Tiêu đề

của một trình đơn được hiển thị undimmed ngay cả khi tất cả các lệnh của menu được chia không có sẵn (bị mờ) cùng một lúc. Người dùng luôn có thể xem nội dung của menu , cho dù họ có không.

Vì vậy, giải pháp thực sự cho vấn đề là có thể chuyển sang màu xám tất cả các mục menu trong một trình đơn nhất định khi ứng dụng của bạn ở trạng thái nhất định. Để làm điều này, implement the NSUserInterfaceValidations protocol. Nó chỉ yêu cầu triển khai phương thức - (BOOL)validateUserInterfaceItem:. Thông thường, khi thực hiện phương pháp này, bạn chỉ cần kiểm tra bộ chọn của mục giao diện người dùng đang được xác thực và trả về CÓ nếu nó được kích hoạt hoặc KHÔNG nếu nó không được (sẽ làm xám mục trình đơn).

+0

Có, bạn đã hiểu đúng, CJ. Tôi * đã cố gắng làm mờ các menu "Tệp" và/hoặc "Chỉnh sửa" - thay vì các mục tương ứng - và không nhận thức được đoạn quan trọng trong Nguyên tắc Giao diện Con người của Apple chỉ ra rằng tôi không nên làm theo cách đó. Tôi đã bao gồm phương thức - (BOOL) validateUserInterfaceItem: trong mã của tôi và nó hoạt động hoàn hảo. Một giải pháp đơn giản như vậy. Cảm ơn rất nhiều :-) – Bender