Apple действительно смешно. Я имею в виду, они говорят, что это работает:
- (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];
}
}
У меня есть View Controller. Как вы знаете, View Controllers наследуются от UIResponder. Этот диспетчер представлений создает объект MyView, который наследует UIView, и добавляет его в качестве подчиненного к нему собственного представления.
Итак, мы имеем:
View Controller > имеет вид (автоматически) > имеет MyView (это UIView).
Теперь внутри MyView я помещаю этот код, как показано выше, с NSLog, который печатает "коснулся MyView". Но я передаю это событие следующему ответчику, как и выше. И внутри ViewController у меня есть еще один метод touchhesBegan, который просто печатает NSLog a la "touched view controller".
Теперь угадайте, что: Когда я касаюсь MyView, он печатает "коснулся MyView". Когда я касаюсь вне MyView, который является видом VC, я получаю "сенсорный контроллер просмотра". Поэтому оба работают! Но что не работает, это пересылка события. Потому что теперь на самом деле следующим ответчиком должен быть контроллер вида, так как между ними нет ничего другого. Но метод обработки событий VC никогда не вызывается, когда я его пересылаю.
$% &! §!!
Идеи, ребята?
Выяснил странный материал MyView next responder - это вид контроллера вида. Это имеет смысл, потому что MyView является подходом к этому. Но я не модифицировал этот UIView из контроллера представления. это ничего обычая. И он не реализует обработку сенсорных событий. Не следует ли передать сообщение в контроллер вида? Как я могу просто позволить этому пройти? Если я удалю код обработки событий в MyView, то событие прекрасно поступит в контроллер вида.