问题标签 [uievent]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
11348 浏览

ios - UIGestureRecognizer 接收触摸但也将其转发给 UIControl

您将如何允许 aUIGestureRecognizer接收UIView触摸事件,同时确保另一个底层/覆盖UIView也接收相同的触摸事件?

可以说我有以下视图层次结构: 查看层级涂鸦

视图 A(蓝色)和 B(红色)都是同一个父视图(灰色)的子视图。换句话说,他们都是兄弟姐妹,并且顺序决定他们中的哪一个覆盖另一个。

选项 1:视图 B(红色)有一个常规UIButton作为其子视图。选项 2:视图 A(蓝色)有一个常规UIButton作为其子视图。

为了便于解释,给定选项 1:视图 A(蓝色UITapGestureRecognizer)附加了一个(或者甚至更多,其他 UIGestureRecognizers)。什么是最优雅的方法来确保UIButton确实接收到其区域的所有触摸,但视图 A(蓝色)也接收到它的触摸UITapGestureRecognizer

如果可能的话,解决方案不应涉及扩展UIButton-class 和手动转发按钮本身的任何事件。想象一下视图 B 将包含更多控件而不仅仅是一个按钮。所有这些控件都应该以某种方式允许视图 A 接收对其UIGestureRecognizer.

我确实提供了两个选项,因为我不在乎这些视图(A 或 B)中的哪一个先出现,只要两者都收到触摸。

到目前为止,我所有的方法都突然走到了死胡同。也许自定义响应者链会是一个不错的解决方案?UIKit我一直在想,整个//堆栈中必须有一个优雅的解决方案UIEventUIResponder

0 投票
1 回答
1380 浏览

ios - 需要 UIResponder 链说明

在这种情况下,我无法让我UIButtons的等工作:UIScrollViews

我有 base UIViewController,它是UIWindow. 在该层之上,我添加了一些其他UIViews内容,我将其称为“中间层视图”。在顶部,我UIView为覆盖对象添加了另一个。

中间层视图定期更改为不同的视图。UIView它使用的来自一个,UIViewController由一个 NIB 文件制作。这是一个例子

现在,当我触摸屏幕时,第一响应者显然是被触摸的theOverlayView或 any 。触摸输入在视图链上上升,但似乎完全跳过了中间层视图等。它直接跳到根部。UIResponderOverlayViewUIEventUIRespondersUIViewUIViewController

有谁知道这里发生了什么?

可以通过某种方式创建两个来解决UIEvents吗?一个用于叠加视图,一个用于中间层视图?那可能吗?如果是这样,怎么做?

非常感激任何的帮助。谢谢,丰富

0 投票
1 回答
835 浏览

iphone - UIButton在事件内部修饰,边界改变?

UIButton所以,我在昨晚深夜浪费了几个小时后发现了一个有趣的行为。我可能在过去遇到过这种情况,但不记得了。到目前为止,我找不到这种行为的解释,所以如果您有任何相关信息,请赐教:

创建 的实例UIButton,然后将其操作设置为UIControlEventTouchUpInside。现在,在您正在运行的应用程序中,按住按钮并按住不放,离开按钮并注意移动/拖动手指时边界似乎发生了变化。触摸被识别为距按钮的原始框架有一段距离,边界。

这在我的应用程序中引起了相当多的问题,我使用 locationInView: 来实现代码来确定UITableViewCell按钮的超级视图的 indexPath。

我确定 indexPath 的两个替代解决方案是:

  1. 使用按钮 superview 的 superview UITableViewCell和 UITableView 的indexPathForCell: 方法。

  2. 而是UIControlEventTouchDown 在指定我的按钮操作时使用。

希望有人觉得这很有帮助,或者可以为问题的解决方案做出贡献。

0 投票
2 回答
4147 浏览

objective-c - CCTouchesBegan - CCTouchesEnded 需要两个坐标

首先,我是 Cocos2D 和 Obj-C 的新手,所以我确实遇到过这样的简单问题。我的问题看起来像这样:屏幕上有一个精灵,用户必须触摸它的顶部,在仍然按下的同时向上移动一点,然后释放触摸。想象一个戴着帽子的玩家精灵,你必须触摸帽子并将手指稍微向上移动,以使他的帽子飞向那个方向。实现这一点的最佳方法是什么?

到目前为止我得到的是:

我是否需要创建另一种方法来确定 CCTouchesBegan 位置,然后将该值提供给 CCTouchesEnded 方法,然后我在其中计算角度并使帽子飞走?或者我可以在上述方法本身中确定触摸开始的位置吗?

非常感谢您的任何回答:)

0 投票
0 回答
689 浏览

iphone - 重新发出触摸事件

我正在尝试创建一个覆盖视图来监视触摸然后消失,但还将触摸事件转发到视图下方的任何内容。

我的测试应用程序有一个内部带有按钮的视图。我将覆盖视图添加为另一个子视图(本质上是按钮的兄弟),它占据了整个屏幕。

对于我尝试过的两种解决方案,叠加层会保持状态以确定它对触摸的响应方式。当收到 touchesBegan 事件时,overlay 将停止响应 hitTest 或 pointInside,直到收到 touchesCancelled 或 touchesEnded。

对于我的第一种方法,我尝试重新发布该事件:

但是,该按钮没有响应重新发布的事件。

我的第二种方法是使用 hitTest 来发现覆盖层下方的视图(我的按钮),然后直接向它发送 touchesXXX 消息:

它找到了按钮(根据日志),但是当我在其上调用 touchesXXX 时,按钮根本没有反应。

我不确定还能尝试什么,因为按钮不会响应直接调用 touchesBegan =/

0 投票
1 回答
2860 浏览

iphone - 发生触摸事件时禁用 UIButton 蓝色

当我的按钮被按下时,我不希望它的外观发生变化。当我触摸它时它会变成蓝色。我尝试进入 IB 并取消选中“突出显示调整图像”,但这似乎并没有改变任何东西。我也未选中“显示触摸突出显示”。如何禁用此功能?感谢您的任何意见。

0 投票
1 回答
319 浏览

objective-c - 在 C++ 类中接收 UI 事件

我正在用 Xcode for iOS 编写 Objective-C++。我的项目主要是 C++ 类和一些最高级别的 Objective-C 类。我的 C++ 类包含 Objective-C UI 元素,我需要它们来接收 UI 事件。UI 元素是否可以直接调用 C++ 成员函数?即是否有与此调用 C++ 函数的等价物:

据我了解,这对我@selector没有帮助。我需要另一种方法来使控件调用我的成员函数-是否存在?

现在,我正在使用一个 Objective-C 接收器类,它是我的 C++ 类的成员,它接收 UI 事件,然后适当地调用我的 C++ 类,但这似乎是实现这一目标的一种迂回方式。如果我所描述的不可能,有没有更好的方法来做我想做的事情?

0 投票
1 回答
720 浏览

objective-c - 自定义 UIControl 总是发送 nil UIEvent 对象

我有一个派生自 UIControl 的类,我在其中监视 touchesBegan/Moved/Ended/Cancelled 事件。在这些事件中,我在超级响应者和下一个响应者上调用相同的事件,如下所示:

我有一个拥有表格视图的父控件。表格视图中的每个单元格都包含我的一个自定义控件。为了响应单击,我在创建控件并将其添加到表格视图单元格时为其分配了一个选择器,如下所示:

父控件的选择器如下所示:

有人能告诉我为什么 UIEvent 总是为零吗?如果我使用 UIButton 的实例而不是我的自定义 UIControl,则 UIEvent 不为零。此外,如果我不在我的控件中调用 sendActionsForControlEvents,那么父控件将永远不会收到任何事件通知。

0 投票
0 回答
1086 浏览

ios - 从 iOS 设备 UIView 发送 UIEvent 到外屏 UIView

我正在使用 AirPlay 开发一个应用程序,我需要一种方法让主屏幕上的触摸充当我外部屏幕上 UI 上的触摸,以便与大量以前存在的自定义 UI 元素兼容。重建 UI 元素比找到将触摸从一个视图转换到另一个视图的方法要困难几个数量级。

外部屏幕将具有一种鼠标指针来表示交互,因为用户需要屏幕上的一个参考点来执行他们的操作。这可能会造成用户界面指南障碍,但当我到达时我会越过那座山。希望我能找到一种方法使这个项目足够不像鼠标。用户将作为一种触控板与设备进行交互。

我在设备屏幕上使用一个带有“sendEvent”子类的窗口来捕获触摸事件。我正在尝试手动遍历需要接收输入的视图的视图层次结构。找到我想与之交谈的观点并不难。对于基于 UIControl 的类,我可以调用“sendActionsForControlEvents”来为控件发送适当的消息。这可能需要一些爱抚,但目前这不是主要问题。

对于 touchesBegan、touchesMoved 等的 UI 事件。我没有一个像样的方法来伪造 UIEvent 信息。除非我有 UIEvent,否则我无法调用这些函数,而且我似乎没有任何方法可以创建 UIEvent 对象。sendEvent 中的 UIEvent 没有与辅助屏幕上的指针位置匹配的位置(至少),所以简单地传递它不会给我我想要的东西。

是否有任何合法的方式来合成这些信息?

0 投票
1 回答
716 浏览

ios - 在 hitTest:withEvent: 中拦截 UIControlEventTouchUpInside:

我遵循了这个很棒的教程,终于设法实现了一个 3 独立行的可滚动界面。

不过,我遇到了一个问题,因为该教程的关键是使用方法:

为了即使在滚动视图区域之外也能处理滚动。事实上,我的行充满了 UIButton,并且它们的 TouchUpInside 事件与命中事件混在一起。有没有办法让这个方法识别这些事件并拒绝它们,让它们传播给合法的委托?