2010-04-21 38 views
7

Sé que se ha hablado mucho de esto. Creo que he examinado todas las preguntas en este sitio y aún no he podido hacer que funcione.No se puede tocar UITextField en UIScrollView

Soy nuevo en el desarrollo, pero tengo una buena idea de lo que está pasando con todo mi código. Definitivamente no tengo mucha experiencia, esta es mi primera aplicación para iPhone.

Estoy haciendo un campo de entrada de datos que se compone de múltiples UITextFields dentro de un UIScrollView. Evitaré explicar los otros detalles por el momento, ya que parece ser un problema muy básico. Sin una vista de desplazamiento, los campos de texto funcionan perfectamente. Puedo tocar el campo de texto y el teclado o la vista del selector aparecen de forma adecuada. Cuando agrego los campos de texto a una vista de desplazamiento, la vista de desplazamiento funciona, pero los campos de texto no reciben mis toques.
Aquí está la clave: cuando la 'Interacción del usuario' está HABILITADA, la vista de desplazamiento funciona pero los toques del campo de texto NO están registrados. Cuando 'Interacción del usuario' está DESACTIVADA, la vista de desplazamiento no funciona, pero el campo de texto toca ARE registrado y aparece el teclado/selector.

De las otras publicaciones he visto personas crear subclases y anular los toques en una implementación separada. He visto personas que usan vistas de contenido personalizadas (¿subvistas?), He visto algunas soluciones que ahora están obsoletas ya que las API han cambiado en las versiones más recientes del SDK, y estoy completamente atascado.

Voy a omitir mi código por ahora, porque tal vez hay una solución que alguien tiene sin necesidad de mi código. Si alguien necesita ver mi código, lo subiré. Mi aplicación está siendo escrita en el 3.1.3 SDK.

Si alguien tiene ALGUNA información que podría ayudar, sería muy apreciada.

Respuesta

0

Parece que está utilizando IB para hacer gran parte de su diseño de interfaz de usuario. Si adopta un enfoque programático, puede configurar la siguiente jerarquía de vista que debería funcionar.

Su objeto controlador de vista la gestión de su punto de vista de desplazamiento y los campos de texto debe tener un objeto y un objeto UIScrollViewUIView (además de cualquier UITextField objetos que necesita). En el método loadView de la clase de controlador de vista, asigne e inicialice el objeto UIView y agregue sus campos de texto como subvistas. Al final del método, asigne e inicialice el objeto UIScrollView y luego agregue el UIView al UIScrollView como subvista.

A modo de ejemplo, si el objeto UIScrollView se llama ScrollView y su UIView objeto llamado MAINVIEW las siguientes líneas al final del método loadView del controlador de vista sería configurar correctamente la vista de desplazamiento con la vista principal con los campos de texto en él :

scrollView = [[UIScrollView alloc] initWithFrame: [[UIScreen mainScreen] bounds] ]; 
scrollView.backgroundColor = [UIColor whiteColor]; 
scrollView.contentSize = mainView.frame.size; 
[scrollView addSubview: mainView]; 
self.view = scrollView; 
0

Es posible que tenga que habilitar/deshabilitar la interacción del usuario tanto para la vista de desplazamiento como para los campos de texto, según sea necesario.

Si es posible, es mejor utilizar diferentes mecanismos táctiles para cada proceso (desplazamiento y entrada de campo de texto).

Tal vez pueda verificar la diferencia de tiempo entre el inicio y el final del toque, de modo que pueda detectar la diferencia entre un arrastre (desplazamiento) y un toque (ingreso de texto).

Habiendo dicho que si propagas los toques de los campos de texto a la vista de desplazamiento, estarás bien.Una cosa que uso es:

[myObject addTarget:self action:@selector(itemTouchedUpInside:) forControlEvents:UIControlEventTouchUpInside]; 

que pasa el objeto tocado para que pueda identificarlo y actuar en consecuencia.

3

Esto es lo que funcionó para mí en Xcode 4.3.3.

En el guión gráfico, seleccione su scrollview. Seleccione Attribute Inspector en el lado derecho. Desmarque Delays Content Touches.

Cuestiones relacionadas