2009-10-30 3 views
1

Я добавление программно в UIView B на другой UIView А.подвид вне кадра parentview события

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

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

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

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

ответ

0

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

3

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

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

+0

У меня такая же проблема, как у лефакира, и я бы предпочел не создавать третий вид, с помощью которого можно было бы содержать два других. Вышеупомянутое решение также появилось в моей голове; означает ли нижнее положение решение не кошерное? И если нет, то почему? –

+0

Именно так я гарантирую, что субподзоры, которые «торчат» из границ их родителей, все еще получают свои события касания. Работает отлично и является самым чистым решением IMHO. Я не вижу никаких недостатков (возможно, кроме незначительного удара производительности из-за итерации через все подпункты, но это кажется незначительным). –

1

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

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

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

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

Смежные вопросы