如何检测 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 值设置为最低吗?UIToolbar
是 UIView
,所以你应该可以。
【参考方案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 工具栏背景上的触摸的主要内容,如果未能解决你的问题,请参考以下文章