2012-03-12 12 views
10

Necesito algunas entradas sobre cómo implementar el tipo de funcionalidad de lista desplegable en iOS.iOS ¿cómo implementar una lista desplegable y cómo encargarse de cerrarla?

Tengo algunas soluciones en mente como usar UITableView para mostrar la lista de elementos de texto. (En mi caso, la lista podría ser estática y dinámica, por lo que UITableView parece ser una buena opción para mi caso). Pero una cosa que no puedo averiguar es cómo descartar el menú desplegable ...

Digamos que hay una lista desplegable abierta en algún lugar de una vista (digamos que esta vista ocupa toda la pantalla). El menú desplegable, una vez abierto, debe ser descartado (cerrado) cuando toco en otro lugar de la vista, como la forma en que un menú desplegable típico funciona en el entorno de escritorio. ¿Cómo puedo hacer eso?

Una forma es escuchar los eventos touchesBegan en la vista y ver si el menú desplegable está abierto, está bien pero el problema es si tengo cosas como el botón y cuando el usuario hace clic en uno de ellos no recibo el touchesBegan entrada en la vista.

¿Cómo puedo resolver esto de forma genérica?

+0

Me gustaría ver en UIPopOverViewController, que hace exactamente lo que necesita, no estoy seguro, pero sólo está disponible para el iPad. –

+1

UIPickerViewController es lo que se debe usar en este caso. Un menú desplegable es algo que no tiene cabida en un iPhone. Es un iPhone, no una PC de escritorio. – Fogmeister

+0

usa esto https://github.com/satishazad/SAMenuDropDown –

Respuesta

19

Las listas desplegables generalmente se implementan en iOS utilizando un UIPickerView. La vista del selector se puede configurar como la vista de entrada del campo de texto que mantendría el menú desplegable, luego se anima dentro y fuera de la pantalla de la misma manera que el teclado.

Por lo general, también necesita un UIToolbar manteniendo pulsado un botón "Hecho" como la vista accesorio de entrada, esto aparece por encima del selector y permite la desestimación de una vez a la elección se hace si no está haciendo eso automáticamente.

Elimine el selector enviando resignFirstResponder al campo de texto, ya sea desde un método de delegado de vista de selector o desde el método de acción de su botón hecho.

de crear la barra de herramientas como una vista de accesorios de la siguiente manera:

accessoryView = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; 
accessoryView.barStyle = UIBarStyleBlackTranslucent; 

UIBarButtonItem *space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 

UIBarButtonItem *done = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneTapped:)]; 

accessoryView.items = [NSArray arrayWithObjects:space,done, nil]; 

textField.inputAccessoryView = accessoryView; 

esto le dará un solo botón "Hecho" a la derecha que está conectada a un método de acción denominado doneTapped:

+0

Hola jrturton, gracias por esta respuesta.Muy útil para implementar la funcionalidad de la lista desplegable. Creé la vista de selector y se me asignó como entrada de entrada de texto. Está funcionando bien, pero no puedo descartar a pickeview. Usted mencionó que necesito usar UIToolbar presionando un botón Listo, pero no entendí cómo hacerlo. ¿Puedes dar un breve ejemplo, por favor? – applefreak

+0

Breve ejemplo agregado – jrturton

+0

¡Muchas gracias! – applefreak

3

Try esto afuera. Puede ayudar.

1) Add the UITableView on a transparent UIView. 
2) The UIView should have the same size as the display screen. 
3) The UITableView shall take the same small size you have. 
4) Implement the touches method as you mentioned for the holding UIView. 
2

En primer lugar, si está en iPad, un UIPopoverViewController está diseñado exactamente para esto. Si necesita algo más personalizado, siempre tengo un botón de pantalla completa invisible para mostrar justo debajo del menú desplegable. Cubre toda la pantalla y cuando se toca o cuando el menú desplegable lo descarta se oculta. Súper simple.

Cuestiones relacionadas