2009-08-21 30 views
13

Me gustaría crear un botón de alternar en mi aplicación de iPhone. Sin embargo, no sé exactamente cuál sería el mejor enfoque para esto.implementación de botón de alternar iPhone

Estoy considerando dos opciones.

Pude subclase un UIButton. De esa forma no tengo que implementar el manejo táctil. Podría simplemente crear un método que devuelva un booleano que indique si el botón está activado o desactivado.

También podría comenzar con una subclase UIView y crearla desde cero. Supongo que sería más fácil hacer cosas como una animación de transición, pero tendría que crear mi propio manejo táctil.

¿Cuál crees que es la mejor? ¿O conocerías una mejor manera? (¿Tal vez hay una vista de código abierto/libre disponible en la web?)

EDIT: No quiero usar el UISwitch porque quiero que mi botón de alternar se vea así. Quiero que sea un gran botón rectangular y hacer que el fondo cambie para indicar el estado.

Gracias!

Respuesta

4

Puede utilizar UIButton y establezca su propiedad enabled.

En Interface Builder, puede establecer imágenes separadas para los estados habilitados y deshabilitados, y IBAction cambiar la propiedad.

+0

Eso es inteligente. ¡Gracias! –

+12

Me preguntaba por qué elegiste la propiedad 'enabled' en lugar de' selected'? Después de leer este consejo hace un tiempo, lo implementé hoy usando 'selected'. Funciona genial. Luego volví a leer la sugerencia e intenté 'enabled'. Una vez desactivado, ya no puede hacer clic en el botón, por lo que no es un gran alternar. ¿Hay alguna configuración que extrañé? – slothbear

+0

Tiene razón, sugerí que en un comentario sobre una respuesta diferente. –

0

¿Ya hay un botón de alternar, o me falta algo aquí?

EDITAR: Como han dicho otros, se llama UISwitch, y se enciende y se apaga.

+0

'UISwitch' es una forma de implementar alternar –

+0

Gracias. No recuerdo el nombre exacto, y no tengo instalado el iPhone SDK en este sistema. – Cinder6

0

puede ser no entiendo la pregunta correctamente ..why no estás usando UISwitch

0

Yo también miré UISwitch, pero en mi caso no quiero un botón de encendido/apagado, realmente quiero un botón para alternar. Lo que estoy tratando de hacer, una vez más en mi caso, es tener un bloque de botones que se ve como un UISegmentedControl, pero donde el usuario puede "alternar" más de uno de los botones en el control a la vez. El problema que trato de resolver es que tengo MUY limitada pantalla real y muchos botones para acceder a la pantalla.

Mi caída probablemente sea una UITableView llena de células de alternar. De esta forma, puedo agregar tantos botones como quiera en un área fija y desplazable de la pantalla.

Tristemente, UISwitch no siempre se ajusta a las especificaciones de UI que las personas tienen en mente, así que supongo que el caballero que publicó la publicación original tampoco estaba buscando un interruptor de encendido/apagado, sino un botón que cambió su estado de algun modo.

0

Necesito hacer esto también. Sin embargo, ¿no se evitaría que el estado activado NO impidiera que el botón retrocediera?

ACTUALIZACIÓN

personas están sugiriendo UISwitch pero pueden ser de piel esta con todos los estados arriba, sobre, discapacitados, selectedUp, SelectedOver, selectedDisabled pertinentes?

+0

Sí, entonces lo que terminé haciendo es usar la propiedad 'seleccionada', que, hasta donde yo sé, realmente no hace nada por UIButton's. –

+0

¿El UIButton es compatible con todos los estados de botón de alternancia para desollar. Perdona mi ignorancia ya que estoy viendo esto como un desarrollador de Flex. En Flex, un ToggleButton tiene los estados normales de arriba, arriba, desactivado, pero también ha seleccionado Arriba, Seleccionado, Desactivado seleccionado, etc. Necesitará todos estos estados para crear un cambio adecuado. Y sí, también necesita una propiedad seleccionada. Si esto existe en el UIButton, sugeriría que puede activar el alternar. ¿Es esto así? –

+0

No, no creo que tenga. Pero lo que puede hacer es sobrescribir el método setSelected: y cambiar el estilo allí. –

2

Simplemente haga un método (IBAction) y también un BOOL. Establezca el valor predeterminado BOOL en FALSE.Su IBAction debe tener este aspecto:

- (IBAction) .... { 

    if (bool) { 
     // do your things 
    } 

    else { 
     // do your things 
    } 

    bool =! bool 
} 

que funciona para mí!

+1

Esto funcionaría, pero no es muy bonito. –

13
-(IBAction)toggle{ 
    if (button.selected == NO) { 
     button.selected = YES; 

    } 
    else { 
     button.selected = NO; 
    } 
} 

o

-(IBAction)toggle:(UIButton*)sender 
{ 
sender.selected = !sender.selected; 
} 

tipo sencillo

+8

que pasa si 'button.selected =! Button.selected;' simplet dude! : D –

+0

hmm eso es bueno :) – Mashhadi

+1

Mejor aún: '- (IBAction) alternar: (UIButton *) remitente { sender.selected =! Sender.selected; } ' – AlexChaffee

Cuestiones relacionadas