2011-07-05 25 views
5

Tengo varias UIWebView personalizadas como subvistas dentro de un UIScrollView. Implementé los métodos táctiles dentro del UIViewController para UIWebView, pero no se están llamando a estos métodos.dentro de UIViewView UIScrollView consume eventos táctiles

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { } 
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { } 
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { } 

He leído en otros lugares y dice que el UIScrollView consumirá los eventos. Esto tiene sentido, pero ¿el UIWebView no debe recibir el evento táctil antes de UIScrollView? Lo que probablemente está sucediendo es que UIWebBrowserView (una subvista de UIWebView) está consumiendo los eventos. Sin embargo, esta clase no se puede subclasificar, por lo que no puedo enviar los eventos en la cadena de supervistas a UIScrollView. He leído en la documentación de Apple iOS que uno nunca debería colocar un UIWebView dentro de un UIScrollView, pero tengo que hacerlo para mis propósitos.

Así que mi pregunta es: ¿cómo pueden mis UIWebView personalizadas (que son subvistas de un UIScrollView) recibir eventos táctiles?

Mis controladores y vistas están configurados de la siguiente manera:

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

HomeViewController se carga desde un archivo de plumilla que contiene una vista personalizada: Homeview. DashboardViewController se carga desde un archivo Nib. Contiene algunas etiquetas, controles deslizantes, etc. (tenga en cuenta que no hay una vista personalizada aquí - No estoy subclasificando UIView aquí).

HomeViewController carga dinámicamente varios controles DashboardViewControllers y agrega su vista al HomeView.

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

Respuesta

0

La interacción del usuario está habilitada de manera estándar.

¿Ha conectado sus puntos de vista delegar al propietario del archivo? ¿Y vinculó su vista al controlador? Y asegúrese de conectar las acciones correspondientes a los métodos correctos. (Ctrl + clic en Ver y arrastre el signo más en el método correspondiente en el archivo de 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

Sí, mi delegado de vistas está conectado al propietario del archivo. ¿Qué quieres decir con vincular mi Vista al Controlador? Además, conecté la subclase UIScrollView como la vista principal para el Controlador. Ver mi publicación actualizada; He agregado más información que podría ayudar. Gracias. – mdupls

+0

Esta solución no funciona, ya que UIWebBrowserView (no UIWebView) parece captar los eventos táctiles. Sin embargo, esta clase no se puede subclasificar para alterar la funcionalidad. – mdupls

0

¿Ha configurado userInteractionEnabled = YES para todas las subvistas?

+0

userInteractionEnabled está habilitado de forma predeterminada. – Jules

+0

Vaya. Pensé que era NO por defecto. contentSize en el scrollView tal vez? –

0

UIViewController pone los toques * mensajes antes UIView. El UIViewController no pasa el mensaje junto con UIView (llamando a [super touchesBegan]) de manera predeterminada. Por lo tanto, necesita mover o reenviar las funciones * de los toques si su UIView tiene un controlador

Personally I poner los diversos toca * métodos en la subclase de vista, no en la subclase del controlador de vista.

+0

El problema aquí es que no subclasifica UIView para las vistas que son subvistas en UIScrollView. Solo uso la vista generada desde el Nib. Ver mi publicación actualizada; He agregado más información que podría ayudar. Gracias. – mdupls

0

Puedes probar esto, cuando recibes los métodos de toques que se requieren para UIScrollView, a su vez puedes llamar al mismo método de toques en la subvista desde scrollview.

Cuestiones relacionadas