2012-02-11 2 views
1

У меня очень сложный подкласс UITableViewCell, и я нашел в Instruments, что вызов [super layoutSubviews] требует 5% времени работы при прокрутке таблицы. Поэтому я пробовал пропустить вызов [super layoutSubviews], так как сам выполнял макет всех подзапросов. Это дало мне повышение производительности. Тем не менее, я обнаружил, что без вызова [super layoutSubviews] интерактивные субблоки, подобные кнопкам, больше не получают сенсорных событий.Как я могу пропустить вызов [super layoutSubviews] для UITableViewCell?

Итак, мой вопрос: как я могу опустить [super layoutSubviews] в мой подкласс UITableViewCell, чтобы получить повышение производительности, не нарушая доставку событий прикосновений в подзаголовки?

ответ

0

Наконец отслеживали его вниз. Это связано с тем, что cell.contentView.frame (0, 0, 320, 44) без вызова [super layoutSubviews], и границы недостаточно велики (в частности, высота 44 не достаточно высока), чтобы заключить все интерактивные подсмотры. Согласно документу из -hitTest:withEvent::

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

Это точно случай здесь.

+0

У меня возникла проблема. Каково было ваше окончательное решение? Добавили ли вы [super layoutSubviews] или просто отрегулировали рамку contentView? Вы указали, что еще нужно отобразить в layoutviewview, которое мы должны добавить вручную? –

+0

@Don layout contentView вручную. – an0

0

Вы пробовали перечислить через subviews и установить userInteractionEnabled на YES? Еще вроде хак, но если это действительно единственное, что не хватает, оно должно работать.

Успехов,

Damien

+0

Все подходящие подзаголовки имеют 'userInteractionEnabled' значение' YES'. – an0

+0

Хммм. Интересно, добавляет ли этот метод распознавания жестов к элементам управления layoutSubviews. Это может быть проблемой - вы можете проверить эту теорию, перечислив распознаватели жестов на кнопке и увидев, есть ли у нее какие-либо. Другая вещь, которую вы можете проверить, - это если свойство exclusiveTouch установлено на YES в супервизии (кажется маловероятным, поскольку по умолчанию NO). Извините, что у меня нет твердого ответа. Удачи. –