2013-12-10 13 views
10

W systemie Mac OS X kliknięcie trzema palcami na słowie powoduje wyświetlenie okna z definicją słowa.W jaki sposób mogę zmienić zachowanie dotykowego 3-palcowego w trybie NSTextView?

Image showing a pop up window showing a word definition.

Ten idiom jest również stosowany w Xcode, gdzie robi kran 3-palcem symbol pokazuje jego dokumentacji, tak jak gdyby był alt + kliknięciu.

Image showing a pop up window showing symbol documentation.

chciałbym zrobić coś podobnego do tego, kiedy i definicje wyświetlanych użytkownikom mojej aplikacji zrobić kran 3-finger na niektórych tokenów w NSTextView. Jednak nie mogę znaleźć sposobu wykrycia, że ​​kran został zrobiony trzema palcami. Czy ktoś mógłby mi w tym pomóc?

EDIT Jeśli to przypomina nic nikomu, trzy wydarzenia (złowione nadrzędnymi [NSApplication sendEvent:]) są wywoływane podczas wykonywania tego rodzaju beczki:

NSEvent: type=SysDefined loc=(270.918,250.488) time=417954.6 flags=0x100 win=0x0 winNum=28293 ctxt=0x0 subtype=6 data1=1818981744 data2=1818981744 
NSEvent: type=SysDefined loc=(270.918,250.488) time=417954.6 flags=0x100 win=0x0 winNum=28293 ctxt=0x0 subtype=9 data1=1818981744 data2=1818981744 
NSEvent: type=Kitdefined loc=(0,263) time=417954.8 flags=0x100 win=0x0 winNum=28306 ctxt=0x0 subtype=4 data1=1135411200 data2=1132691456 

Odpowiedz

7

Reagując na potrójnym kranu w NSTextView można najłatwiej zrobić nadrzędnymi quickLookWithEvent:.

-(void)quickLookWithEvent:(NSEvent *)event 
{ 
    NSLog(@"Look at me! %@", event); 
} 

Nauczyła mnie również, że możesz potrójnie dotknąć dowolnego elementu, aby wywołać szybkie spojrzenie.

+0

kilka miesięcy spóźnienia @zneak, ale 'quickLookWithEvent:' jest udokumentowane jako [będące w 'NSResponder' od 10,8] (https://developer.apple.com/library/mac/documentation/cocoa/reference/applicationkit/classes /NSResponder_Class/Reference/Reference.html#//apple_ref/occ/instm/NSResponder/quickLookWithEvent :) – andlabs

+0

O, słodko. Chyba właśnie to przeoczyłem. – zneak

2

podklasa NSTextView i zastąpić myszkę w dół zdarzenia (w tym miejscu widok zazwyczaj obsługuje zdarzenia click/tap):

-(void)mouseDown:(NSEvent*)event 
{ 
    if (event.clickCount == 3) 
    { 
    //Do your thing 
    } 
} 

Mam nadzieję, że to pomoże.

Jeśli potrójne kliknięcie nie działa dla Ciebie (nie jestem aktualnie z mojego komputera Mac, aby sprawdzić), możesz spróbować czegoś innego. Wiem, że działa on w systemie iOS, nie wiem o gestach gładzika.

Można spróbować dodać UITapGestureRecognizer do widzenia:

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewTapped:)]; 
tapGesture.numberOfTouchesRequired = 3; 

//.... 

-(void)viewTapped:(UITapGestureRecognizer*)tap 
{ 
    if(tap.state == UIGestureRecognizerStateRecognized) 
    { 
    //you detected a three finger tap, do work 
    } 
} 

później EDIT:

znalazłem this article w dokumentacji jabłkowego. Na podstawie próby z tego artykułu, tutaj jest jakiś kod, który powinien być użyteczny (od wystawianie 8-5):

- (void)touchesBeganWithEvent:(NSEvent *)event { 
    if (!self.isEnabled) return; 

    NSSet *touches = [event touchesMatchingPhase:NSTouchPhaseTouching inView:self.view]; 

    if (touches.count == 3) 
    { 
     //Three finger touch detected 
    } 

    [super touchesBeganWithEvent:event]; 
} 
+0

Przykład "mouseDown:" służy do wykonywania 3 kolejnych kranów, ale nie chwyta kranów wykonanych trzema palcami. – zneak

+0

@zneak Zdałem sobie sprawę, że dość szybko, więc dodałem drugą część. Naprawdę myślę, że to może doprowadzić do rozwiązania twojego problemu, jeśli byłby dostępny dla gładzika, który w międzyczasie nie był. Jednak znalazłem coś w dokumentacji Apple, którą edytuję w mojej odpowiedzi. – nestedloop

Powiązane problemy