ios - 如何有条件地拦截触摸事件?

标签 ios uiview uibutton touch swift

我正在使用 Swift 为 iOS 8 编写自定义键盘扩展,但在实现 Swype 风格的涂鸦覆盖时遇到了问题。现在,我的键盘有一个基本的 UIView(我的 UIInputViewControllerview 属性),它有许多 UIButtons 对应于键盘上的键。这些键中的每一个都响应 touchUpInside 事件,并且具有 UISwipeGestureRecognizers,可在向上或向下滑动时输入辅助字符。我重写了 touchesBegan:withEvent: 以将我的涂鸦覆盖 View 添加为 subview ,并覆盖了 touchesEnded:withEvent: 以删除我的 UIInputViewController

目前,如果我尝试从按钮之间的一些间距开始涂鸦,涂鸦叠加 View 会正确显示。但是,如果我从 UIButton 开始涂鸦,UIButton 会捕获触摸事件并且不会将其转发到我的 UIInputViewController

如果用户在按钮之间涂写,我如何实现我的键盘,以显示我的涂写覆盖 View ,否则处理按钮按下/滑动?

--编辑--

我试图通过重写 touchesBegan/Moved/Ended/Cancelled 方法将事件转发给下一个响应者来解决这个问题。如果我点击一个按钮然后点击另一个按钮,我可以在两者之间出现一个涂鸦。但是,我仍然无法在按钮上绘制任何东西作为按钮之间的涂鸦。谁有更好的主意?

--编辑 #2--

目前,我的 View 层次结构是这样设置的: UIView(来自 UIInputViewController) subview :我的所有按钮,然后是覆盖 subview 的 ScribbleView

如果我在我的 ScribbleView 上将 userInteractionEnabled 设置为 true,我可以让涂鸦出现在任何地方,无论开始位置如何,但我会失去我的按钮功能。

至于源代码,我一直在尝试各种配置来传递触摸事件等等,但是代码的主体可以在这里找到:https://github.com/Kamaros/ELDeveloperKeyboard .

最佳答案

我在这里猜测,因为我还没有尝试使用 UIInputViewControllers。但是如何子类化 UIButton,然后覆盖 touchesBegan:withEvent:touchesEnded:withEvent: 方法,以便将这些事件转发到您的 UIInputViewController?

关于ios - 如何有条件地拦截触摸事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24857741/

相关文章:

swift - 多个按钮可实现一个操作,无需 IB

iOS:变色圆形按钮

ios - UISearchBar 不会在推送时关闭

ios - 本地通知在错误的时间发送

ios - 如何在用户点击 iPhone 屏幕的任何部分时关闭以编程方式创建的 UIView

ios - UIScrollView 内容大小在不应该的时候裁剪 subview

javascript - 在 ios7+ 中需要固定 header

ios - 是否可以从 iphone 打开 apple watch 应用程序

ios - 如何回到ios中的superview

objective-c - 使用 UIControl(特别是 UIButton)时如何对目标进行排序?