/ / NSDocument i klawiatura (jak keyDown) - objective-c, cocoa, nsdocument

NSDocument i keyboard (jak keyDown) - cel-c, kakao, nsdokument

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 № 1

Pró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"