2011-07-05 80 views
5

我有多個自定義UIWebView作爲UIScrollView內的子視圖。我已經在UIWebView的UIViewController中實現了觸摸方法,但是這些方法沒有被調用。UIWebView裏面的UIScrollView消費觸摸事件

- (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的子視圖)正在消耗事件。然而,這個類不能被子類化,所以我不能把事件通過superview鏈發送到UIScrollView。我已閱讀Apple iOS文檔,認爲不應該在UIS​​crollView中放置UIWebView,但我需要爲我的目的這樣做。

所以我的問題是:我的自定義UIWebView(即UIScrollView的子視圖)如何接收觸摸事件?

我的控制器和視圖被設置如下:

HomeViewController.h /.m /.xib 
HomeView.h /.m (is a UIScrollView) 
DashboardViewController.h /.m /.xib (custom UIWebView's) 

HomeViewController從包含自定義視圖中的筆尖文件中加載:HomeView。 DashboardViewController是從一個Nib文件加載的。它包含一些標籤,滑塊等(請注意,這裏沒有自定義視圖 - 我沒有在這裏繼承UIView)。

HomeViewController動態加載多個DashboardViewControllers並將其視圖添加到HomeView。

DashboardViewController *dashboardViewController = [[DashboardViewController alloc] initWithNibName:@"DashboardViewController" bundle:[NSBundle mainBundle]; 
[homeView addSubview:dashboardViewController.view]; 

回答

0

用戶交互標準啓用。

您是否已將視圖委託連接到文件所有者? 你是否將視圖綁定到控制器?並確保將相應的操作連接到正確的方法。 (CTRL點擊查看,並在您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 
+0

是的,我的意見代表已連接到文件所有者。你是什​​麼意思將我的視圖綁定到控制器?另外,我連接了UIScrollView子類作爲Controller的主視圖。查看我更新的帖子;我添加了一些可能有所幫助的信息。謝謝。 – mdupls

+0

該解決方案不起作用,因爲UIWebBrowserView(而不是UIWebView)似乎挑選了觸摸事件。然而,這個類不能被改寫爲功能。 – mdupls

0

您是否爲所有子視圖設置了userInteractionEnabled = YES

+0

userInteractionEnabled默認啓用。 – Jules

+0

糟糕。以爲這是默認的NO。 scrollView上的contentSize也許? –

0

UIViewController中得到觸摸*前的消息UIView.UIViewController默認沒有將消息傳遞給UIView(通過調用[super touchesBegan]),所以如果你的UIView有一個控制器,你需要移動或轉發觸摸*函數。把各種觸及視圖子類中的方法,而不是視圖控制器子類。

+0

這裏的問題是,我沒有爲UIScrollView中的子視圖的子視圖繼承UIView。我只是使用從Nib生成的視圖。查看我更新的帖子;我添加了一些可能有所幫助的信息。謝謝。 – mdupls

0

你可以試試這個,當你爲UIScrollView調用觸摸方法時,你可以在子視圖中從scrollview中調用相同的觸摸方法。