Отлавливать сенсорные события в любом месте экрана в определенных представлениях?

У меня есть меню, которое я хотел бы автоматически скрыть, если оно неактивно через определенное время. Это меню состоит из иерархии UIViewControllers, которые представляют различные представления.

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

Можно ли поймать все события касания в наборе UIViews? Возможно, просто оставить логическое значение и использовать основной UIWindow для перехвата событий касания?

ИЗМЕНИТЬ:

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


person Moshe    schedule 29.02.2012    source источник
comment
Итак, чтобы уточнить, вы хотели бы, скажем, только меню запоминать касания и сбрасывать таймер, или весь вид?   -  person CodaFi    schedule 29.02.2012
comment
Меню, которое представлено модально.   -  person Moshe    schedule 29.02.2012
comment
Хм... Не зная ваших рассуждений, это довольно сомнительный дизайн... Разве вы не должны позволять пользователям вручную закрывать любые модальные диалоги. Но это не относится к делу. Можно ли подключить наблюдателей к каждому методу для каждого элемента пользовательского интерфейса в меню? Может быть, они могли бы установить что-то в синглтоне sudder?   -  person CodaFi    schedule 29.02.2012
comment
@CodaFi - я хочу, чтобы один человек управлял приложением через пользовательский интерфейс с паролем. Если администратор уходит, он должен автоматически закрыться через некоторое время.   -  person Moshe    schedule 29.02.2012


Ответы (2)


Один из способов убедиться в этом — создать подкласс UIApplication и переопределить метод - (void)sendEvent:(UIEvent *)event. Каждое событие касания, происходящее в вашем приложении, проходит через этот метод, и вы можете проверить тип UIEvent, чтобы узнать, является ли он UIEventTypeTouches, и сбросить таймер.

Другой способ сделать это просто включает в себя добавление прозрачного слоя по всему доступному пользователю пользовательскому интерфейсу и переопределение hitTest:withEvent:.

person overboming    schedule 29.02.2012
comment
Как я могу использовать свой подкласс UIApplication? - person Moshe; 03.04.2012
comment
+1 к hitTest:withEvent: - ловит событие и может передать его подвидам. Вы должны написать этот метод для корневого представления. - person brigadir; 15.11.2013

Вы можете иметь невидимое представление поверх ваших контроллеров представления модальных окон и поместить на него либо распознаватель жестов, который может запускать таймер, либо

-touchesBegan:withTouches

метод, а затем отправить в .nextResponder тот же метод.

person Adrian Ancuta    schedule 29.02.2012