2013-04-09 8 views
5

Mam statyczny NSTextField, który nakłada duży komunikat o błędzie w mojej aplikacji OS X. Próbuję go uruchomić, aby umożliwić użytkownikowi kliknięcie elementów sterujących poniżej.NSTextField click-through?

W IB mam odznaczone "włączony" i mam zaznaczone "Odmawia First Responder"

Ja również zrobić to w kodzie, ponieważ to nie działa:

[largeErrorText setEnabled:NO]; 
[largeErrorText setRefusesFirstResponder:YES]; 

Still , wchodzi w interakcje z obiektami znajdującymi się pod nim. Jakieś pomysły, jakie jeszcze mogą być?

+0

możliwe duplikat [Jak wyłączyć interakcji użytkownika w niestandardowych View] (http://stackoverflow.com/questions/11740638/how-to-disable-user-interaction-in-a-custom-view) –

+0

@GabrielePetronella: to pytanie nie ma nic wspólnego z tym – NSGod

+0

chodzi o wyłączanie interakcji, nie? –

Odpowiedz

0

Zakładam, że jesteś opisujący scenariusz, jak na poniższym rysunku przedstawiono:

enter image description here

Wewnętrzna czerwony prostokąt jest zarys ramki etykiety NSTextField, a ty mówisz, że nawet jeśli masz wyłączone pole tekstowe i zestaw odrzuca pierwszą odpowiedź, kliknięcia nie przechodzą do NSButton?

Ten scenariusz projektowy opisuje warunek o nazwie "nakładające się widoki rodzeństwa". Ogólnie staram się tego unikać, jeśli to w ogóle możliwe. Jeśli nie możesz, możesz uzyskać pożądane zachowanie, upewniając się, że etykieta NSTextField znajduje się "za" wszystkimi innymi obiektami interfejsu użytkownika, z którymi chcesz współdziałać. Możesz to zrobić, wybierając etykietę i wybierając Edytor> Ułóż> Wyślij do tyłu. Zapewni to, że przycisk znajduje się przed polem tekstowym, aby mógł prawidłowo przechwytywać zdarzenia myszy.

+0

Świetny komentarz, ale nie odpowiada na pytanie. Dzięki. –

19

Jedynym sposobem, jaki znalazłem, aby obiekt był przezroczysty dla kliknięcia, jest podklasa tego obiektu (w twoim przypadku NSTextField) i nadpisanie metody hitTest zwracającej zero. W ten sposób NSTextField nie zareaguje na kliknięcie, aby poniższy NSView zareagował na kliknięcie.

- (NSView*)hitTest:(NSPoint)aPoint 
{ 
    return nil; 
} 
Powiązane problemy