导航栏按钮单击事件在单击其下方区域时触发。

Posted

技术标签:

【中文标题】导航栏按钮单击事件在单击其下方区域时触发。【英文标题】:Navigation bar button click event firing when clicked on area below it. 【发布时间】:2013-03-11 14:42:46 【问题描述】:

我将带有自定义视图的导航栏作为右栏按钮项。自定义视图中有两个按钮。但是当我触摸右侧导航栏下方的区域时,它会触发按钮触摸事件。我已经通过更改背景颜色检查了按钮和视图的框架,所有这些都设置得很好。 我检查了默认的 ios 应用程序,如时钟、日历、设置、笔记等,它们都有相同的行为。在屏幕截图(默认 iOS 日历应用程序)中触摸红色矩形。触发按钮的触摸事件同样发生在我的应用程序中..

这是代码..

UIView* navigationButtonsView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 100.0f, 44.0f)];

UIButton *p = [UIButton buttonWithType:UIButtonTypeCustom];
[p setImage:[UIImage imageNamed:@"PBtn.png"] forState:UIControlStateNormal];
[p addTarget:self action:@selector(PButtonPushed:) forControlEvents:UIControlEventTouchUpInside];
[p setFrame:CGRectMake(43, 0, 57, 44)];
[navigationButtonsView addSubview:p];

UIButton *o = [UIButton buttonWithType:UIButtonTypeCustom];
[o addTarget:self action:@selector(oButtonPushed:) forControlEvents:UIControlEventTouchUpInside];
[o setFrame:CGRectMake(0, 0, 38, 44)];
[o setImage:[UIImage imageNamed:@"O.png"] forState:UIControlStateNormal];
[navigationButtonsView addSubview:o];

UIBarButtonItem *barItem = [[UIBarButtonItem alloc] initWithCustomView:navigationButtonsView];
[musicVC.navigationItem setRightBarButtonItem: barItem animated:NO];

如何更改导航栏按钮的默认 iOS 行为?因为 m 在这些按钮下方有一些 UI,因此它的顶部区域没有响应。 提前谢谢..

【问题讨论】:

【参考方案1】:

这是正常行为 - 两个原因:

    iOS 不知道您的手指有多大 - 所以它必须决定触摸的位置。在这种情况下,导航栏会覆盖表格视图。

    这可能与人机界面指南有关(抱歉,没有链接。谷歌它)说最小可触摸区域必须为 44 像素。这种行为可能是试图符合这些要求的“UIBarButtonItem”。

【讨论】:

以上是关于导航栏按钮单击事件在单击其下方区域时触发。的主要内容,如果未能解决你的问题,请参考以下文章

当用户在菜单外单击时,如何关闭 Bootstrap 导航栏下拉菜单?

单击导航条折叠/关闭

单击时使导航栏折叠/关闭

单击导航返回按钮,然后导航栏重叠相同的视图

导航栏按钮在 Shiny 中单击时不起作用

在 Bootstrap 3 中单击导航栏元素外部时如何关闭打开的折叠导航栏?