我在UIScrollView中有多个自定义UIWebView作为子视图。我已经在UIViewController中为UIWebView实现了触摸方法,但是没有调用这些方法。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { }
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { }
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { }
我在其他地方读过,它说UIScrollView会消耗这些事件。这是有道理的,但是如果UIWebView在UIScrollView本身之前没有收到触摸事件吗?可能发生的是,UIWebBrowserView(UIWebView的子视图)正在消耗这些事件。但是,这个类不能被子类化,因此我无法将超级视图链中的事件发送到UIScrollView。我已经在Apple iOS文档中读到,不应该在UIScrollView中放置UIWebView,但我需要这样做才能达到我的目的。
所以我的问题是:我的自定义UIWebView(即UIScrollView的子视图)如何接收触摸事件?
我的控制器和视图设置如下:
HomeViewController.h /.m /.xib
HomeView.h /.m (is a UIScrollView)
DashboardViewController.h /.m /.xib (custom UIWebView's)
HomeViewController从包含自定义视图的Nib文件加载:HomeView。 DashboardViewController从Nib文件加载。它包含一些标签,滑块等(请注意,这里没有自定义视图 - 我不是在这里继承UIView。)
HomeViewController动态加载多个DashboardViewControllers并将其视图添加到HomeView。
DashboardViewController *dashboardViewController = [[DashboardViewController alloc] initWithNibName:@"DashboardViewController" bundle:[NSBundle mainBundle];
[homeView addSubview:dashboardViewController.view];
答案 0 :(得分:2)
您可能正在寻找canCancelContentTouches
。
scrollView.canCancelContentTouches = NO;
答案 1 :(得分:0)
您是否为所有子视图设置了userInteractionEnabled = YES
?
答案 2 :(得分:0)
用户互动已启用标准。
您是否将视图委托连接到文件所有者? 你是否将视图绑定到控制器?并确保将相应的操作连接到正确的方法。 (CTRL单击View并将加号拖到Class.h文件中的相应方法上。
@interface MyScrollView : UIViewController {
UIView *myFirstView;
UIView *mySecondView;
UIView *myThirdView;
}
@property (nonatomic, retain) IBOutlet UIView *myView;
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
@end
答案 3 :(得分:0)
UIViewController在UIView之前获取touches *消息。默认情况下,UIViewController不会将消息传递给UIView(通过调用[super touchesBegan])。因此,如果你的UIView有一个控制器,你需要移动或转发touches *函数。
我个人将各种touches *方法放在视图子类上,而不是视图控制器子类。
答案 4 :(得分:0)
你可以试试这个,当你依次为UIScrollView调用touches方法时,你可以在scrollview的子视图中调用相同的touches方法。