检测UIScrollView上的触摸事件和UIView的组件
我有我的简单的故事板iPad项目UIViewController包含UIScrollView放置在整个表面(1024 x 768)。 我已经创build了3个XIV文件,这些文件是我的应用程序在viewDidLoad中加载的UIViews,并将它们添加到UIScrollView中。 这3个XIB文件中的每一个都只包含一个UIButton。
这是层次结构:
〜UIViewController( UIViewControllerClass是这个UIViewController的类)
~~ UIScrollView(包含3个相同的UIViews)
UIView( UIViewClass是这个XIB文件的文件所有者)
~~~~ UIButton
我想我的UIViewControllerClass变得意识到两个:触摸UIScrollView组件上的任何地方,如果UIScrollView被触摸,如果UIScrollView中的UIView里面的UIButton被触摸,以确切的信息,该button被触摸。
我在UIViewClass里面创build了IBAction,以便在UIScrollView中的UIView里面使用UIButton,当我在所有元素(UIViewController,UIView和UIScrollView)上设置User Interaction Enabled = YES时,就像调用它一样。
但在这一点上,我的UIViewControllerClass不知道该触摸发生在该UIButton上的UIScrollView。 我做了这样的触摸识别器:
UITapGestureRecognizer *touch = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTouch)]; touch.numberOfTouchesRequired = 1;
并将其添加到UIScrollView组件。 通过这种方式,我能够在UIViewControllerClass中检测UIScrollView组件上的触摸事件,但是在UIScrollView中的UIView中触摸UIButton的事件处理程序不会再被调用。
所以,我需要在UIViewControllerClass中有这两个信息:
- 触摸UIScrollView组件
- 触摸在UIScrollView(如果这个button被触摸)的UIView中的UIButton
我想附加触摸事件识别器到整个UIScrollView组件是不是解决scheme,因为它禁用所有我写在UIViewClass中的触摸事件处理程序。
我认为解决scheme是以某种方式触及哪些在UIView里面的组件UIScrollView应该发送到UIViewControllerClass,但我没有find一种方法来做到这一点。
如果有人能帮助我,我会非常感激。 提前致谢。
[编辑#1:郑的回答]
点按手势必须将cancelsTouchesInView选项设置为NO !
对于我上面的情况,这条线解决了一切:
touch.cancelsTouchesInView = NO;
非常感谢郑。
我不知道这是否适用于你,但我已经给出了关于在scrollview里面的视图触摸事件的答案:
在UIScrollView中closures键盘
这个想法是告诉scrollView不要吞噬滚动视图区域内的所有轻击手势。
我将在这里粘贴代码,希望它能解决你的问题:
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)]; // prevents the scroll view from swallowing up the touch event of child buttons tapGesture.cancelsTouchesInView = NO; [pageScrollView addGestureRecognizer:tapGesture]; [tapGesture release]; ... // method to hide keyboard when user taps on a scrollview -(void)hideKeyboard { [myTextFieldInScrollView resignFirstResponder]; }
你可以inheritance你的UIScrollView,并覆盖系统调用的方法- hitTest:withEvent:
来确定哪个视图处理事件。 每当调用它时,都可以假定在滚动视图内发生触摸事件,通过调用超级实现,可以获得通常会处理事件的视图。
你可以在UIScrollView中捕捉任何一种手势。 确保你也处理一些默认属性,就像设置cancelsTouchesInView属性为false,默认情况下是true。 还给你的子视图一些标签号来区分select器。 也可以使他们的用户交互为真。
让tap = UITapGestureRecognizer(target:self,action:
select(didTapByUser(_ :)))
- 如何动态填充Tab Bar控制器的标签栏。 (在swift中 – iOS 9)
- Xcode AVCapturesession扫描特定帧中的条形码(rectOfInterest不起作用)
- IOS Facebook的SDK – 发布打开graphics和时间轴上显示,无需点击活动日志
- Objective-C从plist中select性地填充表; 如果键等于
- 从相机面部检测iOS
- 通过其内容dynamic设置UIScrollView和UITableView的高度
- 安装后从软件包中删除文件
- 如何从网页打开android应用程序?
- 来自CTLineCreateTruncatedLine的CTCineRef的iOS CoreText CTLineGetStringRange