使 UIControl 仅接受滑动手势并传递触摸/点击手势

Posted

技术标签:

【中文标题】使 UIControl 仅接受滑动手势并传递触摸/点击手势【英文标题】:Make UIControl only accept swipe gestures and pass along touch/tap gestures 【发布时间】:2014-10-22 06:22:27 【问题描述】:

我正在使用 Xcode 6.1 在 Objective-C 中为 iPhone 5 开发 ios 8.1 应用程序。

单击UITextView 时,我会在键盘上方弹出一个不可见的UIControl 视图,以便用户可以从键盘上方向下滑动并关闭键盘(然后移动UIControl又看不见了)。这工作正常。然而,这个在键盘上方弹出的UIControl 视图覆盖了另一个UITextView,因此无法点击被覆盖的文本视图。每次我尝试点击覆盖的文本视图(因为UIControl 不是不透明的所以可见)时,什么都没有发生,因为UIControl 似乎只是在点击而不对它们做任何事情。

我的问题是,我怎样才能让UIControl 简单地忽略点击(让它们直接通过,以便下面的UITextView 可以接受它们),但接受滑动(这样,当它是向下滑动,它可以关闭键盘并移出视线)?

我尝试了几种解决方案,但没有找到一种可以很好地满足我的需求。

谢谢!

【问题讨论】:

【参考方案1】:

此question 与您的相似。将您的 UIControl 子类化并覆盖 - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 并调用其 super 变体以将其传递给它的视图。

【讨论】:

感谢您引导我回答这个问题。我没有时间测试解决方案(我已经从这个问题上移开了),但没有任何其他答案比这更好,所以我将其标记为已接受。跨度> 【参考方案2】:

还有另一种方法可以做到这一点。将UIViewController 的主视图更改为UIControl 的子类,而不是UIView。将以下IBAction 连接到视图,以便在点击背景时关闭键盘。

- (IBAction)backgroundTapped

    [self.view endEditing:YES];


Apple Documentation - endEditing:

【讨论】:

这是否仍允许该主视图的子视图接收手势?它不会自己处理所有手势吗? @EthanG 不会影响UITextField,你试过了吗? 我还没有尝试过,因为我仍然想要一个类似于我描述的解决方案。我只是在问,以防我最终不得不退回到这个替代方案。谢谢。【参考方案3】:

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer

使用此事件。如果点击手势返回no。

【讨论】:

唯一的问题是,我不知道UIControl 只是忽略手势。我希望手势通过它传递到下面的任何视图。我认为您在此处提供的建议不会做到这一点,对吗?

以上是关于使 UIControl 仅接受滑动手势并传递触摸/点击手势的主要内容,如果未能解决你的问题,请参考以下文章

使平移手势识别器仅在向下滑动并在 tableview 顶部时响应

如何取消对子 UIControl 的触摸?

iOS事件机制(点击、手势、UIControl)

当用户滑动并点击手指(使用触摸手势)时如何隐藏所有 CollectionViewCell?

窃取触摸的手势,如 iOS 多任务滑动

Android webview:防止将触摸手势传递给父viewpager