подпредставление вне рамок родительских событий - PullRequest
1 голос
/ 30 октября 2009

Я программно добавляю UIView B к другому UIView A.

Кадр A: {{0, 372}, {320, 44}}. B UIView добавляется в {0, -74} и имеет ширину {320, 74}.

Моя проблема в том, что события касания B не обрабатываются.

Точнее, события касания обрабатываются в одноуровневом UITableView UIView, который заканчивается на {0, 372}, даже если B UIview отображается поверх UITableView.

Любое решение, пожалуйста?

Ответы [ 3 ]

3 голосов
/ 30 октября 2009

Чтобы определить представление, в котором происходит событие касания, Какао обходит иерархию представления (и отправляет каждому подпредставлению сообщение hitTest:withEvent:. В свою очередь, это сообщение вызывает pointInside:withEvent: само по себе, которое возвращает логическое значение, которое указывает, является ли вид содержит указанную точку.

Предположительно, вы можете создать подкласс UIView A и переопределить его pointInside:withEvent: метод, чтобы возвращать YES также для точек, которые находятся за пределами A, но находятся внутри B.

1 голос
/ 30 октября 2009

Хорошо, ваш B-UIView полностью находится за пределами A-UIView. Если вы настроите два общих вида с одинаковыми кадрами, как это в Интерфейсном конструкторе, и установите фон в разные цвета, вы абсолютно ничего не увидите в B-UIView. альтернативный текст http://img256.imageshack.us/img256/6789/screenshot20091030at350.png

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

UITableView обрабатывает попадания, потому что B UIView вообще не находится в цепочке респондента.

Вам нужно сделать B-UIView родным братом A-View вместо невидимого и неактивного подпредставления. Затем наложите это на нижнюю часть UITableView.

0 голосов
/ 30 октября 2009

Вы не можете сделать это таким образом. Вы должны добавить свои представления A и B в другое представление C. И это будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...