Superview игнорирует UserInteractionEnabled = НЕТ? - PullRequest
6 голосов
/ 06 августа 2011

У меня есть подпредставление, которое выходит на экран анимированным, и когда оно находится на экране, я хочу, чтобы суперпредставление (в моем случае, вид на заднем плане) игнорировало события касания.Я перепробовал все, но это не работает.

Есть ли способ заставить суперпредставление прекратить получать сенсорные события?

Спасибо!

1 Ответ

4 голосов
/ 06 августа 2011

Когда вы говорите суперпредставление, я предполагаю, что вы имеете в виду супервидение анимирующего представления.Документация Apple очень неопределенна в отношении userInteractionEnabled, но я думаю, что если вы установите для нее значение false, она отключит сенсорные события в конкретном представлении, но не в его подпредставлениях.Я хотел бы предложить вам сделать это рекурсивно.Вот пример кода, который вы можете использовать, чтобы отключить / включить ВСЕ сенсорные события в представлении:

- (void)setInteraction:(BOOL)allow onView:(UIView *)aView {
    [aView setUserInteractionEnabled:allow];
    for (UIView * v in [aView subviews]) {
        [self setInteraction:allow onView:v];
    }
}

Затем вы можете вызвать это в своем суперпредставлении [self setInteraction:NO onView:[self superview]].Это, конечно, также отключило бы ваши сенсорные события, поскольку вы рекурсивно отключаете их в своем суперпредставлении.Конечно, вы всегда можете снова включить сенсорные события [self setUserInteractionEnabled:NO].

Кроме того, в справочнике Apple по классу UIView упоминается, что некоторые компоненты пользовательского интерфейса отменяют этот метод:

Примечание : некоторые подклассы UIKit переопределяют это свойство и возвращают другое значение по умолчанию.См. Документацию для любого класса, который вы используете, чтобы определить, возвращает ли он другое значение для этого свойства.

...