2011-02-02 10 views
6

Arabirim oluşturucuda birçok öğe içeren bir menüm var. İyi görünüyor ve 'etkin' kontrol edildi.
Ancak uygulamayı çalıştırdığımda tüm menü öğeleri grileştirildi.menü öğesi etkin, ancak yine de grileştirildi

isEnabled'u kontrol ettim, doğru döndü.

Ayrıca, program aracılığıyla oluşturulan menü öğeleri (initWithTitle ve arayüz oluşturucu olmadan) gayet iyi çalışır.

Burada bir şey mi özlüyorum? OSX geliştirme için gerçekten çok yeni (aslında, bu benim ilk günüm).
size

cevap

7

bunu google olabilir ve fayda, 'Eylem' yöntemi :(id)sender parametre olmadan ilan edildi NSMenuItem'daki yöntem yedi ve şikayet etmedi. Oh iyi.

+0

Eylem seçicisi olarak "çık" ı geçtiyseniz, bunun çalışmasını beklerdim. Eğer çıkıp bitirdiyseniz: 'neden:' bırakma: 'uyguladığınız' quit' (no ':') yönteminden farklı bir yöntemdir. 'quit', 'quit:', quit :: 've' quit: inAHuff: 'hepsi farklı seçicilerdir. –

3

Ah, NSMenu kullanmanın veba ...

Kontrol dışarı <NSMenuValidation> ederiz.

Genellikle uygulama gibi basit olacaktır:

-(IBAction) quit; 

Garip setAction: durumda biri ise

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

teşekkürler! Bazı şeylerle, ben kök nedenini kendim izledim, ama yararlı bilgiler için +1. –

+2

Hedef eyleme yanıt vermiyorsa, bunun menü öğesini tatmin edeceğini sanmıyorum. –

10

menü öğesinin hedefini ayarlamayı unutmayın: menü öğesinin hedef ayarlanırsa bu nesne öğenin eylem yöntemini uygulaması halinde

menuItem.target = self; 
  • ardından NSMenu ilk denetler. Aksi takdirde, öğe devre dışı bırakılır. Hedef öğenin işlem yöntemini uygularsa, NSMenu öncelikle bu nesnenin validateMenuItem: veya validateUserInterfaceItem: yöntemini uygulayıp uygulamadığını kontrol eder. Aksi takdirde, menü öğesi etkinleştirilir. Eğer varsa, menü öğesinin etkinleştirilmiş durumu, yöntemin dönüş değeri ile belirlenir.

  • Menü öğesinin hedefi ayarlanmamışsa ve NSMenu nesnesi bir bağlamsal menü değilse, NSMenu hedefi belirlemek için yanıtlayıcı zincirini kullanır. Yanıtlayıcı zincirinde öğenin eylemini uygulayan hiçbir nesne yoksa, öğe numaralı devre dışıdır.

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

+2

Teşekkürler, güzel bahşiş! – Morkrom

+0

Hedef, ilk yanıtlayıcıdır (menü öğesinden birinci yanıtlayıcı proxy nesnesine sürükleme denetimi tarafından IB'de ayarlanır). Eylem, günümüzde yanıtlayıcı zincirinde olduğunu varsayan denetleyici denetleyicide. Hala grileşti. Herhangi bir fikir? – wcochran