使 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 顶部时响应