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

Posted

技术标签:

【中文标题】如何检测 UINavigationController 工具栏背景上的触摸【英文标题】:how to detect touches on the background of UINavigationController toolbar 【发布时间】:2011-08-08 20:45:45 【问题描述】:

我想检测 UINavigationController 提供的 UIToolbar 背景上的触摸(或者只需轻按一下即可)。我尝试过但不起作用(或者我无法开始工作)的事情:

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

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

【问题讨论】:

您不能添加一个大按钮并将其 z 值设置为最低吗? UIToolbarUIView,所以你应该可以。 【参考方案1】:

下面的代码可以解决问题:

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 - 感谢您在评论中提出的建议。这很有帮助。

【讨论】:

以上是关于如何检测 UINavigationController 工具栏背景上的触摸的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationController

UINavigationController 风格

全屏显示 ViewController

多控制器

UINavigationControllerDelegate 不起作用

viewController 出现时出现黑色