Вопрос

У меня проблемы с получением UIButtons, UIScrollViews и т.д. Работает в этой ситуации:

У меня есть база UIViewController, который является корневым контроллером UIWindowАнкет Выше этого слоя у меня есть другой UIViews Добавлено, что я назову «вид среднего слоя». И на вершине у меня есть другой UIView Добавлено для наложения объектов.

Вид среднего слоя регулярно изменяется для разных представлений. А UIView он используется из UIViewController, сделанный файлом NIB. Вот пример

if ( mode == eModeShowView1 )
    UIViewController* nextController = [[UIViewController alloc] initWithNibName:@"View1"...
else if ( mode == eModeShowView2 )
    UIViewController* nextController = [[UIViewController alloc] initWithNibName:@"View2"...

[UIView insertSubview:nextController.view below:m_overlayView];

Теперь, когда я касаюсь экрана, первым респондентом, очевидно, является OverlayView или любые UIResponder на OverlayView Это было тронуто. А UIEvent прикосновения поднимается вверх по цепочке обзора, но, кажется, пропускает вид среднего слоя и UIResponders на что UIView вообще. Он прыгает прямо на корень UIViewController.

Кто -нибудь знает, что здесь происходит?

Может ли это быть решено, каким -то образом создав два UIEvents? Один для оверлейного представления и один для вида среднего слоя? Это возможно? Если да, то как?

Любая помощь будет наиболее оценена. Спасибо, Рич

Это было полезно?

Решение

Edit1 Start:

Вы можете поместить uitapgesturerecognizer в m_overlayview и initwithtarget: your-middleview Действие: некоторые методики-в-средне

Теперь, в вашем Middleview вы можете идентифицировать распознавание. Штат как uigesturerecognizerStatebegan, Condated и т. Д. И делать то, что вы хотите.

EDIT1 END:

Вы можете отладить это. Просто используйте журналы touchesbegan во всех ваших контроллерах. Это будет ясно журналом последовательности сенсорных ответов.

ОК .. так что это описание метода из документации может ответить вам. Ваш m_overlayView а также nextController.view относятся друг к другу как о братьев и сестрах, а не надзором. Таким образом, о вашем прикосновении к любому из них не будет сообщено не другим, а вместо базы superview что является обычным superview обоим братьям и сестрам.

Следовательно, вы понимаете, что средний слой обходится. На самом деле ваш средний слой-это брат, а больше не является надзором. Надеюсь, что, по крайней мере, даст вам путь вперед;)

insertSubview:belowSubview:

Вставьте представление ниже другого представления в иерархию просмотра.

(void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview

Параметры:

view

Представление, чтобы вставить ниже другого представления. Он удален с его superview Если это не родственник сестер.

сестры:

Вид и сестры, который будет выше вставленного представления.

Дискуссия:

Этот метод сохраняет представление и устанавливает свой следующий ответ на приемник, который является его новым superview.

Просмотры могут иметь только один надзор. Если View уже имеет superview и этот вид не является приемником, этот метод удаляет предыдущий superview Прежде чем сделать приемник новым superview.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top