如何检测UINavigationController工具栏背景上的触摸

时间:2011-08-08 20:45:46

标签: iphone ios uinavigationcontroller uitoolbar

我想在UINavigationController提供的UIToolbar的背景上检测触摸(或者只是点击一下)。我尝试过的东西不起作用(或者说我无法工作):

  • 将UITapGestureController添加到UIToolbar - 这会失败,因为虽然它确实检测到了点击,但它会消耗触摸因此工具栏上的按钮停止工作(因为它们没有接触到触摸)
  • 在作为UIBarButtonSystemItemFlexibleSpace的UIBarButtonItem上设置目标和操作 - 灵活空间似乎没有接触到触摸(看起来很公平)

我想要的是检测按钮上没有的任何触摸。鉴于我无法为UINavigationController设置工具栏(它是只读的),所以我无法替换我自己的UIToolbar子类,是否有我缺少的技巧/解决方法?

1 个答案:

答案 0 :(得分:4)

以下代码可以解决问题:

CGSize toolbarSize = [[[self navigationController] toolbar] frame].size;
UIControl* backgroundControl = [[UIControl alloc] initWithFrame: CGRectMake(0, 0, toolbarSize.width, toolbarSize.height)];
[backgroundControl addTarget:self action:@selector(toolbarBackgroundTap) forControlEvents:UIControlEventTouchDown];
[backgroundControl setAutoresizingMask: [[[self navigationController] toolbar] autoresizingMask]];
[[[self navigationController] toolbar] insertSubview:backgroundControl atIndex:0];
[backgroundControl release];

@bdares - 感谢您在评论中提出的建议。这非常有帮助。