2011-02-02 25 views
6

Tôi có một menu với một số mục được tạo trong trình tạo giao diện. Nó có vẻ tốt và 'kích hoạt' được chọn.
Nhưng khi tôi chạy ứng dụng, tất cả các mục menu đều chuyển sang màu xám.mục trình đơn được bật nhưng vẫn chuyển sang màu xám

Tôi đã kiểm tra isEnabled, nó trả về true.

Ngoài ra, các mục menu được tạo lập trình (với initWithTitle và không có trình tạo giao diện) hoạt động tốt.

Tôi có thiếu gì đó ở đây không? Tôi thực sự khá mới để phát triển OSX (trên thực tế, đây là ngày đầu tiên của tôi).
Cảm ơn bạn

Trả lời

7

Trong trường hợp ai đó có thể google này ra và lợi ích, 'Action' phương pháp đã được công bố mà không :(id)sender tham số:

-(IBAction) quit; 

Kỳ lạ thay, setAction phương pháp trong NSMenuItem ăn nó và không phàn nàn. Oh well.

+0

Nếu bạn đã bỏ qua 'quit' làm công cụ chọn hành động, tôi đã mong đợi rằng nó hoạt động. Nếu bạn đã bỏ qua 'quit:', đó là lý do tại sao: 'quit:' là một phương thức khác với phương thức 'quit' (no': ') mà bạn đã triển khai. 'quit',' quit: ',' ​​quit :: ', và' quit: inAHuff: 'là tất cả các bộ chọn khác nhau. –

3

Ah, các bệnh dịch hạch của việc sử dụng NSMenu ...

Check-out <NSMenuValidation>.

Thông thường việc thực hiện sẽ đơn giản như:

- (BOOL)validateMenuItem:(NSMenuItem *)menuItem { 
    return [menuItem isEnabled]; 
} 
+0

Cảm ơn! Với một số fiddling, tôi đã theo dõi nguyên nhân gốc rễ bản thân mình, nhưng 1 cho các thông tin hữu ích. –

+2

Tôi không nghĩ rằng điều này sẽ đáp ứng mục trình đơn nếu mục tiêu không phản ứng với hành động. –

10

Hãy nhớ đặt mục tiêu mục menu của bạn:

menuItem.target = self; 
  • Nếu mục tiêu mục trình đơn được thiết lập, sau đó NSMenu kiểm tra đầu tiên để xem nếu đối tượng mà thực hiện phương pháp hành động của mục. Nếu không, thì mục đó sẽ bị vô hiệu hóa. Nếu mục tiêu thực hiện phương thức hành động của mục, trước tiên NSMenu sẽ kiểm tra xem đối tượng đó có triển khai phương thức validateMenuItem: hay validateUserInterfaceItem: hay không. Nếu không, thì mục menu được bật. Nếu có, thì trạng thái được bật của mục menu được xác định bởi giá trị trả về của phương thức.

  • Nếu mục tiêu của mục menu không được đặt và đối tượng NSMenu không phải là menu ngữ cảnh, thì NSMenu sử dụng chuỗi trả lời để xác định mục tiêu. Nếu không có đối tượng nào trong chuỗi phản hồi thực hiện hành động của mục, thì mục bị tắt.

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MenuList/Articles/EnablingMenuItems.html

+2

Cảm ơn bạn, mẹo hay! – Morkrom

+0

Mục tiêu là trả lời đầu tiên (được đặt bằng IB bằng cách kéo điều khiển từ mục trình đơn đến đối tượng proxy trả lời đầu tiên). Hành động nằm trong bộ điều khiển khung nhìn ngày nay được cho là nằm trong chuỗi trả lời. Vẫn chuyển sang màu xám. Bất kỳ ý tưởng? – wcochran

Các vấn đề liên quan