Еще одна проблема с UIResponder и доставкой событий - PullRequest
0 голосов
/ 01 июня 2011

Я пытаюсь реализовать объект UIResponder, который позволит мне записывать действия на экране, а затем передавать событие следующему респонденту, чтобы приложение могло работать как обычно.Я изучал это некоторое время и вижу два способа, которые должны работать: либо создать корневое представление и игнорировать касания в подпредставлениях, размещенных поверх него, что позволяет корневому представлению обрабатывать их;ИЛИ создайте GestureRecognizer, который добавляется ко всем подпредставлениям.Мое приложение имеет несколько представлений, которые меняются местами в главном окне.

Я испробовал оба метода и оказался в одном и том же тупике: я получаю события touchesBegan / touchesMoved / touchesEnded в моем представлении (илиRecognizer), но ничего не происходит, когда я отправляю их по цепочке респондента.Я перепробовал все следующее.Обратите внимание, что «view» происходит от touch.view, а view.superview - это мой объект «loginView», который содержит кнопку, которая была нажата, чтобы получить меня здесь:

 [view hitTest:frame.origin withEvent:event];
 [view touchesBegan:touches withEvent:event];
 [view.superview hitTest:frame.origin withEvent:event];
 [view.superview touchesBegan:touches withEvent:event];
 [[view nextResponder] touchesBegan:touches withEvent:event];
 [[view nextResponder] hitTest:frame.origin withEvent:event];
 [[[view superview] nextResponder] touchesBegan:touches withEvent:event];
 [[view superview] hitTest:frame.origin withEvent:event];

Ничего из этого не работает, и вфакт '[[view nextResponder] hitTest ...' генерирует предупреждение.

Я попробовал resignFirstResponder и даже собирался попробовать sendAction, но сейчас я просто цепляюсь за соломинку.Я попытался поместить свой взгляд в нижней и верхней части цепочки и получить те же результаты.Очевидно, что я что-то упускаю, но я не вижу, что.

Может кто-нибудь подсказать мне, что делать дальше?

- Сэм

1 Ответ

0 голосов
/ 01 июня 2011

Я не совсем уверен, что именно вы пытаетесь сделать, но, возможно, http://iphonedevelopment.blogspot.com/2008/10/bit-about-responder-chain.html поможет вам.

Лично я делаю то, что я делаю в подклассе UIView, чтобы передатькасается этого:

- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event {
    [super touchesBegan:touches withEvent:event];
    [[self nextResponder] touchesBegan:touches withEvent:event];
}

- (void)touchesMoved:(NSSet*)touches withEvent:(UIEvent *)event {
    [super touchesMoved:touches withEvent:event];
    [[self nextResponder] touchesMoved:touches withEvent:event];
}

- (void)touchesEnded:(NSSet*)touches withEvent:(UIEvent *)event {
    [super touchesEnded:touches withEvent:event];
    [[self nextResponder] touchesEnded:touches withEvent:event];
}
...