• <tfoot id='UyRJd'></tfoot>

    <i id='UyRJd'><tr id='UyRJd'><dt id='UyRJd'><q id='UyRJd'><span id='UyRJd'><b id='UyRJd'><form id='UyRJd'><ins id='UyRJd'></ins><ul id='UyRJd'></ul><sub id='UyRJd'></sub></form><legend id='UyRJd'></legend><bdo id='UyRJd'><pre id='UyRJd'><center id='UyRJd'></center></pre></bdo></b><th id='UyRJd'></th></span></q></dt></tr></i><div id='UyRJd'><tfoot id='UyRJd'></tfoot><dl id='UyRJd'><fieldset id='UyRJd'></fieldset></dl></div>
      <bdo id='UyRJd'></bdo><ul id='UyRJd'></ul>

      <small id='UyRJd'></small><noframes id='UyRJd'>

      <legend id='UyRJd'><style id='UyRJd'><dir id='UyRJd'><q id='UyRJd'></q></dir></style></legend>
      1. 为什么 UINavigationBar 会窃取触摸事件?

        时间:2023-07-09

            1. <legend id='gAUmP'><style id='gAUmP'><dir id='gAUmP'><q id='gAUmP'></q></dir></style></legend>

                <bdo id='gAUmP'></bdo><ul id='gAUmP'></ul>
              • <i id='gAUmP'><tr id='gAUmP'><dt id='gAUmP'><q id='gAUmP'><span id='gAUmP'><b id='gAUmP'><form id='gAUmP'><ins id='gAUmP'></ins><ul id='gAUmP'></ul><sub id='gAUmP'></sub></form><legend id='gAUmP'></legend><bdo id='gAUmP'><pre id='gAUmP'><center id='gAUmP'></center></pre></bdo></b><th id='gAUmP'></th></span></q></dt></tr></i><div id='gAUmP'><tfoot id='gAUmP'></tfoot><dl id='gAUmP'><fieldset id='gAUmP'></fieldset></dl></div>

                  <tbody id='gAUmP'></tbody>
                <tfoot id='gAUmP'></tfoot>

                <small id='gAUmP'></small><noframes id='gAUmP'>

                  本文介绍了为什么 UINavigationBar 会窃取触摸事件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我有一个自定义 UIButton,其中 UILabel 添加为子视图.仅当我在上界下方约 15 点触摸按钮时,按钮才会执行给定的选择器.当我点击该区域上方时,什么也没有发生.

                  我发现它不是由于按钮和标签的错误创建引起的,因为在我将按钮向下移动大约 15 px 后它可以正常工作.

                  更新我忘了说位于 UINavigationBar 下方的按钮和按钮上部的 1/3 没有触摸事件.

                  图片在这里p>

                  带有 4 个按钮的视图位于 NavigationBar 下方.并且当触摸顶部的篮球"时,BackButton 得到触摸事件,当触摸顶部的钢琴"时,rightBarButton(如果存在)得到触摸.如果不存在,则什么都没有发生.

                  我没有在应用文档中找到这个记录在案的功能.

                  我还发现 this 主题与我的问题有关,但也没有答案.

                  解决方案

                  我找到了答案 这里(苹果开发者论坛).

                  Keith 在 Apple Developer Technical Support 上,2010 年 5 月 18 日(iPhone OS 3):

                  <块引用>

                  我建议您避免在靠近导航栏或工具栏的位置使用触敏 UI.这些区域通常被称为倾斜因素",使用户更容易在按钮上执行触摸事件,而不会遇到执行精确触摸的困难.例如,UIButton 也是如此.

                  但如果你想在导航栏或工具栏接收到触摸事件之前捕获它,你可以继承 UIWindow 并覆盖:-(void)sendEvent:(UIEvent *)event;

                  我还发现,当我触摸 UINavigationBar 下的区域时,location.y 定义为 64,但不是.所以我做了这个:

                  CustomWindow.h

                  @interface CustomWindow: UIWindow@结尾

                  自定义窗口.m

                  @implementation 自定义窗口- (void) sendEvent:(UIEvent *)event{布尔标志 = 是;开关([事件类型]){案例 UIEventTypeTouches://[self catchUIEventTypeTouches: 事件];如果您需要对事件执行某些操作,请执行for (UITouch *touch in [event allTouches]) {if ([触摸阶段] == UITouchPhaseBegan) {for (int i=0; i<[self.subviews count]; i++) {//获取屏幕上的手指位置CGPoint location = [touch locationInView:[self.subviews objectAtIndex:i]];//报告触摸NSLog(@"[%@] touchesBegan (%i,%i)", [[self.subviews objectAtIndex:i] class],(NSInteger) location.x, (NSInteger) location.y);if (((NSInteger)location.y) == 64) {标志=否;}}}}休息;默认:休息;}如果(!标志)返回;//什么都不做/*重要*/[super sendEvent:(UIEvent *)event];/*重要*
                  <tfoot id='tR6vH'></tfoot>

                  <small id='tR6vH'></small><noframes id='tR6vH'>

                      1. <legend id='tR6vH'><style id='tR6vH'><dir id='tR6vH'><q id='tR6vH'></q></dir></style></legend>
                        <i id='tR6vH'><tr id='tR6vH'><dt id='tR6vH'><q id='tR6vH'><span id='tR6vH'><b id='tR6vH'><form id='tR6vH'><ins id='tR6vH'></ins><ul id='tR6vH'></ul><sub id='tR6vH'></sub></form><legend id='tR6vH'></legend><bdo id='tR6vH'><pre id='tR6vH'><center id='tR6vH'></center></pre></bdo></b><th id='tR6vH'></th></span></q></dt></tr></i><div id='tR6vH'><tfoot id='tR6vH'></tfoot><dl id='tR6vH'><fieldset id='tR6vH'></fieldset></dl></div>
                          <tbody id='tR6vH'></tbody>
                          <bdo id='tR6vH'></bdo><ul id='tR6vH'></ul>