iPhone: прозрачная обработка прикосновений - PullRequest
0 голосов
/ 26 июля 2010

У меня есть UIViewController и связанный с ним UIView.UIView имеет несколько подпредставлений.

Как обрабатывать событие касания внутри указанного прямоугольника в моем подклассе UIViewController?

Эта обработка должна быть прозрачной: UIView и его подпредставлениядолжны по-прежнему получать события касания, даже если они пересекаются с указанным прямоугольником.

PS

  1. Переопределение touchSegan в контроллере вида не работает.Внутренние представления не пропускают события.
  2. Добавление пользовательской кнопки в конец списка подпредставлений UIView также не работает.Внутренние подпредставления не получают сенсорные события.

Ответы [ 3 ]

0 голосов
/ 27 июля 2010

То, что по умолчанию представления не пропускают события, не обязательно означает, что так и должно быть.

Вы можете разделить используемые представления на подклассы и передать им события на контроллер представления.

Другая идея состоит в том, чтобы буквально иметь прозрачный обработчик поверх всех ваших видов.То есть, имейте прозрачный UIView, который расположен над вашими представлениями, обрабатывая сенсорные события, а также пропуская их.Я понятия не имею, работает ли это на практике, но звучит так, как будто это так.

0 голосов
/ 27 июля 2010

Ваши виды и их контроллеры могут обрабатывать прикосновения с помощью прикосновений «Начать», «Касания» или «Касания».В качестве примера в touchesBegan вы можете передать событие следующему респонденту в цепочке респондентов.Таким образом, каждый из ваших видов получит возможность что-то сделать на основе события касания.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    //do something here and then pass the event on
    [self.nextResponder touchesBegan:touches withEvent:event]; 
}
0 голосов
/ 27 июля 2010

трогает Began / трогаетMoved / трогаетEnded, вероятно, это путь. В зависимости от того, что именно вы пытаетесь сделать, UIGestureRecognizer также может быть вариантом.

Чтобы убедиться, что подпредставления пропускают события, установите для userInteractionEnabled значение YES для подпредставлений.

UIView по умолчанию устанавливает это значение в YES, но некоторые подклассы (особенно UILabel) переопределяют это и устанавливают в значение NO.

...