2013-09-23 2 views
0

Я работаю с iOS SDK 6 и 7. У меня есть UIToolbar, который накладывает другое представление - называет его «View B» - у него есть обработчики сообщений touches* для работы с кранами. Панель инструментов, конечно, полна UIBarButtonItems. Когда элемент кнопки панели инструментов включен, тогда, когда я нажимаю его или перетаскиваю, View B получает no сенсорные сообщения, и это желаемый эффект. Но когда элемент кнопки отключен, нажатие или перетаскивание посылает сообщение вниз «через» панель инструментов (как бы), чтобы просмотреть B внизу.iOS: предотвращать нажатие на кнопку с отключенной панелью инструментов

Как обеспечить, чтобы краны на панели инструментов были , а не, переданные в базовые виды, даже если краны происходят из-за отключенных элементов кнопки?

ответ

1

Я по-прежнему считаю это довольно неинтуитивным поведением, но обходное решение довольно просто. Событие touchsBegan, например, передает touches NSSet, который обычно используется, чтобы рассмотреть, какие приказы обрабатывать. Проблема здесь в том, что базовое представление получит набор касаний, которые включают касания, которые не принадлежат ему, и что он не должен обрабатывать. Таким образом, вместо:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    for (UITouch* touch in touches) 
    { 
     ... 
    } 
} 

... использование ...

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    NSSet* myTouches = [event touchesForView: self]; 

    for (UITouch* touch in myTouches) 
    { 
     ... 
    } 
} 

... Таким образом, игнорируя SDK предоставляемых прикосновений и используя только штрихи, имеющие отношение к "View B" самому по себе.

0

Если вы уже обрабатываете события касания вручную в представлении B, просто проверьте, не находится ли точка касания события касания внутри кадра отключенной кнопки. Если это так, просто игнорируйте его.

Смежные вопросы