Próbowałem czytać dokumentację Apple, ale nigdzie nie mogę znaleźć sposobu przechwytywania kluczowych zdarzeń (spacji lub innych) do aplikacji NSDocument.
Z initialFirstRepsodner, jeśli dobrze rozumiem, nie da się tego zrobić.
Dowolny pomysł?
dziękuje za wszystko! Andrea
Odpowiedzi:
1 dla odpowiedzi № 1Próbowałem czytać dokumentację Apple, ale nigdzie nie mogę znaleźć sposobu przechwytywania kluczowych zdarzeń (spacji lub innych) do aplikacji NSDocument.
Po co chcesz obsłużyć kluczowe wydarzenia? Musisz wdrożyć keyDown:
gdzieś, ale dokładnie gdzie zależy od tego, co zamierzasz zrobić.
0 dla odpowiedzi nr 2
Jeśli chcesz uchwycić wszystkie zdarzenia przechodzące domożesz podklasować go i nadpisać -sendEvent :. Jeśli chcesz przechwycić wszystkie zdarzenia w całej aplikacji, możesz zastąpić tę samą metodę w podklasie NSApplication.
0 dla odpowiedzi № 3
Po pierwsze, chciałbym podziękować Peterowi za pomoc!
Użyłem skrótu i ta próbka była bardzo przydatna!
http://dbachrach.com/blog/2005/11/program-global-hotkeys-in-cocoa-easily/
dziękuje za wszystko! Andrea
0 dla odpowiedzi nr 4
Przede wszystkim musisz utworzyć podklasęNSWindow. W xcode wykonaj: Plik -> Nowy plik -> Cel klasy C. nadaj nazwę, na przykład „NSWindowMyEvents”. Spowoduje to utworzenie 2 plików: .h i .m, przejdź do NSWindowMyEvents.h i wykonaj deklarację w następujący sposób:
@interface NSWindowMyEvents : NSWindow {
}
Zapisz zmiany i skompiluj (aby mieć pewność, że IB czyta nowy nagłówek 0, jeśli jest już otwarty).
Otwórz narzędzie do tworzenia interfejsów i załaduj swój plik nib / xibktóry zawiera twój dokument / główne okno. Upewnij się, że wyjście „okno” właściciela pliku jest ustawione na Twoje okno główne. Kliknij swoje główne okno (to, dla którego chcesz otrzymywać zdarzenia) i ustaw jego klasę (za pomocą Inspektora tożsamości cmd + 6) na: NSWindowMyEvents zamiast NSWindow, że jest teraz.
Zapisz zmiany!
Wróć do xcode i NSWindowMyEvents.m i wklej następujący kod:
- (void)keyDown:(NSEvent *)theEvent
{
NSLog(@"keyDown!");
if ([[NSApp currentEvent] modifierFlags] & NSCommandKeyMask)
{
NSLog(@"CommandKey Down!");
}
[super keyDown:theEvent];
}
Wyślij zdarzenie do super JEŻELI chcesz, aby przekazać zdarzenie do pozostałego łańcucha responderów. Obsługujesz teraz zdarzenia klawiatury. Podobnie możesz obsłużyć każde zdarzenie w NSWindowMyEvent.m
Nadzieję, że pomaga ....
-1 dla odpowiedzi № 5
Poleciłbym użycie NSUserDefaults i przechowywanie wspólnych kombinacji klawiszy globalnych, a następnie sprawdzenie keyDown: względem tych zapisanych preferencji, a następnie oparcie swoich działań na tym, który klawisz został naciśnięty.
tj .: #define kMyKeyCommand @ "i"