Цель C: Могу ли я установить подпредставление в качестве первого ответчика? - PullRequest
3 голосов
/ 08 июня 2011

У меня есть ситуация, когда я добавляю представление из другого viewcontroller в существующий viewcontroller.Например:

//set up loading page
self.myLoadingPage = [[LoadingPageViewController alloc]init ];
self.myLoadingPage.view.frame = self.view.bounds;
self.myLoadingPage.view.hidden = YES;

[self.view addSubview:self.myLoadingPage.view];

Можно ли установить self.myLoadingPage в качестве первого респондента?Это тот случай, когда размер представления загрузочной страницы не покрывает весь размер существующего представления, и пользователи все еще могут взаимодействовать с суперпредставлением (что не является желаемым поведением).Я хочу просто включить подпредставление в этом случае.

Ответы [ 3 ]

3 голосов
/ 08 июня 2011

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

3 голосов
/ 08 июня 2011

Самое простое решение - переопределить метод hitTest в вашем представлении загрузки, чтобы вернуть TRUE.Этот вид сверху является первым в цепочке респондента, вызывается метод hitTest, который НОРМАЛЬНО возвращает ИСТИНА, если точка находится в представлении и, следовательно, будет обработана, возвращая ИСТИНА независимо от того, что вы получите событие касания и фактически заблокируете сообщение, повторно отправляемоеследующий респондент.

2 голосов
/ 08 июня 2011

Интересный вопрос. Я нашел похожую запись с цитатой из форумов разработчиков Apple по этому вопросу:

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

Похоже, это указывает на то, что не существует очень простого решения (если только не было изменения API в отношении этого, сделанного после октября 2010 года.)

В качестве альтернативы, я полагаю, вы могли бы пройти через все остальные subviews в вашем superview и по отдельности установить их userInteractionEnabled свойства на NO (но это, вероятно, окажется более громоздким, чем указанные решения).

Я бы хотел увидеть другие способы, позволяющие это сделать.

...