UIResponder цепочка вопросов - PullRequest
1 голос
/ 03 ноября 2010

Я не слишком осведомлен о мелочах, связанных с модификацией цепочки респондента, поэтому, если это глупо, пожалуйста, не разбивайте меня;)

в основном у меня есть 2 стека представления (синие) как подпредставление родительского представления(красный)

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

В некоторых случаях я хочу, чтобы сенсорный ввод воспринимался подходящим дочерним представлением «другого» стека представлений.То есть представление, которое получит эти входные данные, если текущее верхнее представление имеет userinteractionenabled, установленное в no.

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

Вот изображение, которое поможет визуально объяснить и помнить оба синих представления.являются 100% родителей.

http://c.crap.ps/35a5

1 Ответ

3 голосов
/ 03 ноября 2010

Вы можете переопределить hitTest:withEvent: в каждом из представлений, чтобы контролировать, кто получает "потреблять" касание.

В вашем примере я предполагаю, что зеленоватые области - это подпредставления, которые вы хотите использовать для сенсорных событий. Если так, попробуйте это для метода hitTest:

-(UIView*) hitTest:(CGPoint)point withEvent:(UIEvent *)event {  
    UIView *hitView = [super hitTest:point withEvent:event];
    return (hitView == self) ? nil : hitView;
}

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

...