使UIControl只接受滑动手势并传递触摸/轻击手势

问题描述:

我正在使用Xcode 6.1为Objective-C中的iPhone 5开发iOS 8.1应用程序。使UIControl只接受滑动手势并传递触摸/轻击手势

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

我的问题是,我怎样才能让UIControl简单地忽略水龙头(让它们直接通过,以便底部的UITextView可以接受它们),然后接受滑动(这样,当它向下滑动时,它可以关闭键盘并移出视图)?

我已经尝试了几种解决方案,但还没有找到能够满足我需要的解决方案。

谢谢!

question是类似于你的。将UIControl子类继承并覆盖- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event并称其super变体将其传递给其视图。

+0

感谢您指导我解决这个问题。我没有时间去测试这个解决方案(而且我从这个问题开始就已经开始了),但是还没有其他解决方案可以做到这一点,所以我打算将其标记为已接受。 – 2015-03-26 04:13:22

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

- (IBAction)backgroundTapped{ 

    [self.view endEditing:YES]; 

} 

Apple Documentation - endEditing:

+0

这是否仍然允许这个主视图的子视图接收手势?难道它不是只为自己采取所有的手势? – 2014-10-22 14:47:23

+0

@EnghanG它不会影响'UITextField',你尝试过吗? – Michael 2014-10-22 22:18:55

+0

我还没有尝试过,因为我仍然想要一个类似于我所描述的解决方案。我只是在问,如果我最终不得不回到这个选择。谢谢。 – 2014-10-22 23:30:09

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer

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

+0

唯一的问题是,我没有'UIControl'来忽略这个手势。我想让手势通过它到任何下面的视图。我不认为你在这里提供的建议会这样做,是吗? – 2014-10-22 14:48:43