UIToolBar意外地在UIBarButtonItem实例上注册了点击,即使在距离它们很远的地方点击它们也是如此

mkl*_*nt0 4 iphone cocoa-touch uitoolbar uibarbuttonitem ios

我想知道是否有其他人注意到这种行为 - 搜索网络或这些论坛并没有为我找到任何东西:

[自iOS 7.0.1起,更新:问题依然存在于iPhone(但不是iPad)]

在iOS 4.2.1上的iPhone应用程序中,至少为3.2(在模拟器中),如果你
- 有一个工具栏(UIToolBar- 无论是明确创建还是由a提供UINavigationController)填充了UIBarButtonItem样式实例UIBarButtonItemStyleBordered(带有圆角边框的矩形按钮)
-并且它们之间相当大的空白区域(例如,通过在两个按钮之间使用UIBarButtonItem系统类型的实例UIBarButtonSystemItemFlexibleSpace将一个放在最左边而另一个放在最右边)
我观察到以下意外行为:

如果您点击工具栏上距离最近按钮相当远的空白区域,该按钮 - 意外地 - 仍然会记录一个水龙头.

虽然您可以考虑使用该功能,但它也可能会让用户感到不安,特别是如果分享位置没有明确说明调用了哪个功能.在"厚度安定"的视图中,意外点击更可能(例如,其元素与工具栏相邻的游戏),这种行为增加了意外调用功能的可能性.

在我的特定情况下,您可以点击一个按钮右侧最多56个像素,并仍然可以注册一个水龙头.

在Simulator和实际设备上都会出现此问题.有没有其他人有这种经验?我忽略了什么吗?

感谢您的倾听/帮助.

小智 5

我也发现这是一个很大的问题(我有一个按钮直接位于UIToolBar上方,我发现大部分时间我用拇指点击该按钮,我最终击中了UIToolbar中的空白区域并激活而是一个工具栏按钮).

我能找到避免这个问题的唯一方法是在按钮和灵活空间之间放置一个非功能性按钮.这样,灵活空间内的任何触摸都只会激活非功能按钮,不会发生任何事情.我使用UIBarButtonItem initWithCustomView实现了这个,并且只使用了带有1x1透明图像的UIImageView(原谅我!):

[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]];   
Run Code Online (Sandbox Code Playgroud)