Qual é o truque para passar um evento para o próximo respondente na cadeia de respostas?
A Apple é muito engraçada. Quero dizer, eles dizem que isso funciona:
- (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];
}
}
Eu tenho um controlador de exibição. Como você sabe, os Controladores de Visualização herdam da UIResponder. Esse View Controller cria um objeto MyView que herda do UIView e o adiciona como uma subvisualização à sua própria visualização.
Então nós temos:
View Controller> tem uma View (automaticamente)> tem um MyView (que é um UIView).
Agora dentro do MyView eu coloquei esse código como acima com um NSLog que imprime "tocou MyView". Mas eu encaminhar o evento para o próximo respondedor, como acima. E dentro do ViewController eu tenho outro método touchesBegan que apenas imprime um NSLog à la "touch view controller".
Agora adivinhe: quando eu toco no MyView, ele imprime "tocou MyView". Quando eu toco fora do MyView, que é a visão do VC, então, eu recebo um "controlador de visão tocado". Então ambos funcionam! Mas o que não funciona é encaminhar o evento. Porque agora, na verdade, o próximo respondedor deve ser o controlador de visualização, já que não há mais nada entre eles. Mas o método de manipulação de eventos do VC nunca é chamado quando eu o encaminho.
% $ &! § !!
Idéias?
Descobri coisas estranhas Próximo respondedor do MyView é a visão do controlador de visualização. Isso faz sentido, porque o MyView é uma subvisão disso. Mas eu não modifiquei este UIView do controlador de visualização. não é nada personalizado. E não implementa nenhuma manipulação de eventos por toque. A mensagem não deve ser passada para o controlador de exibição? Como eu poderia deixar isso passar? Se eu remover o código de manipulação de eventos no MyView, o evento chegará bem no controlador de exibição.