Почему свойство UIView exclusiveTouch не блокируется? - PullRequest
8 голосов
/ 16 октября 2010

Я запускаю простую UIView с textField - назовем это orderSetNameView - при нажатии кнопки. Я хочу сделать это представление модальным, но без использования

[UIViewController presentModalViewContoller:animated:].

Кажется, я мог бы просто установить textInputView.exclusiveTouch = YES для достижения этого.

В документации Apple говорится о exclusiveTouch:

Булево значение, указывающее, обрабатывает ли получатель события касания исключительно. Если ДА, получатель блокирует другие виды в том же окно от получения сенсорных событий; в противном случае это не так. значение по умолчанию - NO.

Я предполагаю, что "то же окно" означает то же самое окно UI, из которого у меня только одно.

Проблема в том, что когда я создаю экземпляр своего orderSetNameView, добавляю его в качестве подпредставления и устанавливаю exclusiveTouch = YES, события касания происходят во всех других представлениях моего приложения, т. Е. События касания в других представлениях не блокируются, как ожидалось.

    // ....

    [self.view addSubview:self.orderSetNameView];
    [self.orderSetNameView openWithAnimationForAnimationStyle:kMK_AnimationStyleScaleFromCenter];
}

// Set as modal
self.orderSetNameView.exclusiveTouch = YES;

Разве orderSetNameView не должен блокировать сенсорные события во всех других представлениях? Чего мне не хватает?

1 Ответ

14 голосов
/ 08 ноября 2010

На форумах разработчиков Apple:

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

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

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