Jaka jest sztuczka, aby przekazać zdarzenie do następnego respondenta w łańcuchu respondera?

Apple jest naprawdę zabawny. To znaczy, mówią, że to działa:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch* touch = [touches anyObject];
    NSUInteger numTaps = [touch tapCount];
    if (numTaps < 2) {
        [self.nextResponder touchesBegan:touches withEvent:event];
   } else {
        [self handleDoubleTap:touch];
   }
}

Mam kontroler widoku. Jak wiesz, kontrolery widoku dziedziczą po UIResponderze. Ten kontroler widoku tworzy obiekt MyView, który dziedziczy z UIView i dodaje go jako podglądzie do własnego widoku.

Więc mamy:

View Controller> ma widok (automatycznie)> ma MyView (który jest UIView).

Teraz w MyView umieściłem ten kod jak wyżej z NSLogem, który drukuje „dotknął MyView”. Ale przekazuję to zdarzenie następnej odpowiedzi, tak jak powyżej. Wewnątrz ViewControllera mam kolejną metodę Began, która po prostu drukuje NSLog a la „dotknięty kontroler widoku”.

Teraz zgadnij, co: Kiedy dotknę MyView, drukuje „dotknął MyView”. Kiedy dotykam poza MyView, który jest widokiem VC, dostaję „dotknięty kontroler widoku”. Więc obie pracują! Ale to, co nie działa, to przekazanie zdarzenia. Ponieważ teraz, następnym odpowiadającym powinien być kontroler widoku, ponieważ między nimi nie ma nic innego. Ale metoda obsługi zdarzeń VC nigdy nie jest wywoływana, gdy ją przekazuję.

% $ &! § !!

Pomysły?

Wymyśliłem dziwne rzeczy Następnym odpowiadającym MyView jest widok kontrolera widoku. To ma sens, ponieważ MyView jest pod tym względem. Ale nie zmodyfikowałem tego UIView z kontrolera widoku. to nic niestandardowego. I nie implementuje żadnej obsługi zdarzeń dotykowych. Czy wiadomość nie powinna zostać przekazana do kontrolera widoku? Jak mogłem tak po prostu pozwolić? Jeśli usunę kod obsługi zdarzeń w MyView, to zdarzenie dotrze ładnie do kontrolera widoku.

questionAnswers(8)

yourAnswerToTheQuestion