Как я могу нажать кнопку позади прозрачного UIView?

Скажем, у нас есть контроллер представления с одним представлением sub. подпредставление поднимает центр экрана с полями на 100 пкс на всех сторонах. Мы затем добавляем набор небольшого материала для нажатия в том подпредставлении. Мы только используем подпредставление для использования в своих интересах нового кадра (x=0, y=0 в подпредставлении на самом деле 100,100 в родительском представлении).

Затем предположите, что у нас есть что-то позади подпредставления, как меню. Я хочу, чтобы пользователь смог выбрать любой "небольшой материал" в подпредставлении, но если нет ничего там, я хочу, чтобы касания прошли через него (так как фон ясен так или иначе) к кнопкам позади него.

Как я могу сделать это? Похоже, что touchesBegan проходит, но кнопки не работают.

171
задан TheNeil 15 May 2019 в 15:59
поделиться

2 ответа

Насколько я знаю, предполагается, что вы можете сделать это, переопределив метод hitTest:. Я попробовал это сделать, но не смог заставить его работать должным образом.

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

1
ответ дан 23 November 2019 в 20:41
поделиться

Согласно «Руководству по программированию приложений iPhone»:

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

http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/EventHandling/EventHandling.html

Обновлено : удален пример - перечитайте вопрос ...

Есть ли у вас какая-либо обработка жестов в представлениях, которые могут обрабатывать касания до того, как их получит кнопка? Работает ли кнопка, если у вас нет прозрачного экрана?

Есть образцы нерабочего кода?

2
ответ дан 23 November 2019 в 20:41
поделиться