7

Mam główny viewController, nazywa się WelcomeViewController. Mam podklasę UIView i zawiera ona pewne powiązane z nią elementy. Chcę dodać UITapGestureRecognizer do tej podklasy. Chcę tylko, aby urządzenie rozpoznało gesty w tym wyglądzie. Jak mogę to zrobić. Czy powinienem umieścić UITapGestureRecognizer w podklasie, czy powinienem umieścić go w Welcome vc. Z góry dziękuję.Problem z UITapGestureRecognizer

Ponadto, grałem z nim sporo i nie mogę tego rozgryźć.

Odpowiedz

1

Możesz wybrać odbiornik z UITapGestureRecognizer, nie musi to być ta sama klasa, która tworzy instancję rozpoznającą (tj. self). Jeśli tworzysz go w WelcomeViewConroller, można wybrać dowolny element podrzędny do odbierania zdarzeń:

[tapRecognizer addTarget:aSubview action:@selector(myMethod:)]; 
+0

Nie, z której części jestem w porządku. Do którego subview dodaję gest Recognizer do. – Andrew

+0

Wywiad, który odpowie na stuknięcia. –

+0

Ale nie mogę tego zmusić do pracy – Andrew

18

To zależy od tego, czy chcesz obsługiwać kran w widoku niestandardowego obiektu lub w kontrolerze widoku.

Jeżeli w widoku, należy dodać to do jego init lub inne właściwe miejsce:

UITapGestureRecognizer* tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; 
[self addGestureRecognizer:tapRecognizer]; 
[tapRecognizer release]; 

Jeżeli w kontrolerze widoku, dodać to w viewDidLoad (lub innym odpowiednim miejscu):

UITapGestureRecognizer* tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; 
[yourCustomView addGestureRecognizer:tapRecognizer]; 
[tapRecognizer release]; 

obsługi jest taka sama:

- (void)handleTap:(UITapGestureRecognizer*)recognizer 
{ 
    // Do Your thing. 
    if (recognizer.state == UIGestureRecognizerStateEnded) 
    { 
    } 
} 

Spójrz na SimpleGestureRecognizers przykład i powinieneś mieć całkiem niezły pomysł.

---- aktualizacja 10/1/2012 ----

Dla tych z Was, którzy lubią korzystać z ujęć/stalówka, to jest bardzo proste!

  1. Otwórz swój storyboard/stalówkę.

  2. Przeciągnij i upuść rodzaj rozpoznawanego obiektu z Biblioteki obiektów do żądanego elementu interfejsu użytkownika.

  3. prawym przyciskiem myszy na obiekcie Recognizer, a następnie podłącz jego selector do IBAction w pliku Właścicielem (zwykle UIViewController). Jeśli trzeba podłączyć delegata również.

  4. Skończyłeś! enter image description here

+0

Jestem z tym wszystkim dobry. Problem polega na tym, że podzieliłem UIView na mój główny widok. Teraz, do którego widoku dodaję UITapGestureRecognizer do. Wywiad (który nie działa) lub widok główny (który sprawia, że ​​działa, gdy klikam w dowolnym miejscu, w tym poza wydziałem). – Andrew

+0

Ulepszyłem swoją odpowiedź. Czy to ma większy sens w twojej sytuacji? –

+0

Twój główny widok może nie przekazywać zdarzeń do podglądu. Możesz także sprawdzić, czy punkt dotykowy znajduje się w ramce widoku podrzędnego. – TheBlack

2

myślę, że trzeba ustawić delegata rozpoznawania gestów być cokolwiek widok kontroler chcesz obsługiwać krany.

gestureRecognizer.delegate = self; 

na przykład. Następnie wprowadź w swoim nagłówku protokół UIGestureRecognizerDelegate.

+0

To był problem dla mnie - dzięki. –

1

Myślę, że możesz mieć ten sam problem, którego doświadczyłem.Po wywołaniu [yourCustomView addGestureRecognizer: tapRecognizer]; trzeba odwoływać poprzez UIView *, więc w swoim przykładzie spróbować:

UIView *mySubView = yourCustomView; 
[mySubView addGestureRecognizer:tapRecognizer]; 

nadzieję, że to pomaga.

1

Proszę sprawdzić view.userInteractionEnabled=true;

+0

Czy to nie jest domyślnie włączone? – Andrew

+0

tak, jest domyślny, –

Powiązane problemy