UIToolBar неожиданно регистрирует ответвления на экземплярах UIBarButtonItem даже при значительном удалении от них - PullRequest
4 голосов
/ 25 февраля 2011

Интересно, замечал ли кто-нибудь еще такое поведение - поиск в Интернете или на этих форумах ничего не нашел для меня:

[Обновление: проблема все еще существует на iPhone (но не на iPad) с iOS 7.0.1]

В приложении для iPhone на iOS 4.2.1, по крайней мере, до 3.2 (в симуляторе), если у вас
- есть панель инструментов (UIToolBar -будь то явно созданный или предоставленный UINavigationController), заполненный UIBarButtonItem экземплярами стиля UIBarButtonItemStyleBordered (прямоугольные кнопки с закругленными границами)
- и у вас есть значительное пустое пространство между ними (например,использование UIBarButtonItem экземпляра системного типа UIBarButtonSystemItemFlexibleSpace между двумя кнопками для размещения одной слева и другой справа)
Я наблюдаю следующее неожиданное поведение:

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

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

В моем конкретном случае вы можете нажать до56 пикселей справа от кнопки, и при этом регистрируется касание.

Это происходит как в симуляторе, так и на реальных устройствах.У кого-нибудь еще был такой опыт?Я что-то пропускаю?

Спасибо за то, что выслушали / помогли.

Ответы [ 3 ]

5 голосов
/ 07 марта 2011

Я также обнаружил, что это довольно проблематично (у меня есть кнопка, расположенная прямо над UIToolBar, и я обнаружил, что большую часть времени, когда я пытался щелкать по этой кнопке большим пальцем, я в итоге попадал в пустое пространство в UIToolbar и активация одной из кнопок панели инструментов вместо этого.

Единственный способ избежать этой проблемы, который я смог найти, - это положить неработающую кнопку между кнопками и гибким пространством. Таким образом, любые прикосновения внутри гибкого пространства просто активируют нефункциональную кнопку, и ничего не произойдет. Я реализовал это с помощью UIBarButtonItem initWithCustomView и просто использовал UIImageView с прозрачным изображением 1x1 (извините!):

[myToolbar setItems:[NSArray arrayWithObjects:
  [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
                                                 target:nil 
                                                 action:nil] autorelease],
  [[[UIBarButtonItem alloc] initWithCustomView:
    [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"1x1Transparent.png"]] autorelease]] autorelease],
  [[[UIBarButtonItem alloc] initWithTitle:@"Button 1" 
                                    style:UIBarButtonItemStyleBordered
                                   target:self
                                   action:@selector(button1Pressed:)] autorelease],
  [[[UIBarButtonItem alloc] initWithTitle:@"Button 2" 
                                    style:UIBarButtonItemStyleBordered
                                   target:self
                                   action:@selector(button2Pressed:)] autorelease],
  [[[UIBarButtonItem alloc] initWithTitle:@"Button 3" 
                                    style:UIBarButtonItemStyleBordered
                                   target:self
                                   action:@selector(button3Pressed:)] autorelease],
  [[[UIBarButtonItem alloc] initWithCustomView:
    [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"1x1Transparent.png"]] autorelease]] autorelease],
  [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
                                                 target:nil 
                                                 action:nil] autorelease], nil]];   
3 голосов
/ 28 октября 2013

Умное решение - просто добавить экземпляр UIBarButtonItem с простым стилем и отключить его.

0 голосов
/ 25 февраля 2011

Я вижу, как это поведение может быть полезным в некоторых случаях, но неожиданным в других.Пожалуйста, рассмотрите сообщение об ошибке в Apple на http://radar.apple.com.

...