switch iphone uiswitch

iphone - switch xcode



UISwitch-cambiar de encendido/apagado a sí/no (5)

¡Hurra! Desde iOS 6, es posible especificar una imagen que se utilizará para los estados de encendido / apagado, respectivamente. Por lo tanto, esto se puede usar para mostrar una imagen SÍ / NO (o cualquier imagen que represente el texto que preferiría usar en lugar del ON / OFF previamente limitado).

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0")) { [mySwitch setOnImage: [UIImage imageNamed:@"UISwitch-Yes"]]; [mySwitch setOffImage:[UIImage imageNamed:@"UISwitch-No"]]; }

Las imágenes deben tener 77 px de ancho, 27 px de alto y el texto (una imagen para cada estado) debe centrarse horizontalmente dentro de ese ancho de 77 px. Utilizo fondos transparentes para el texto, por lo que todavía puedo usar el tinte para el fondo, que aún funciona con esto.

Por supuesto, parece más fácil simplemente proporcionar texto, en lugar de tener que usar una imagen de texto, pero estoy agradecido por esta nueva opción, al menos.

¿Alguien sabe de alguna manera que pueda cambiar la etiqueta de texto para activar y desactivar a sí y no?

Lo hice con

((UILabel *)[[[[[[switchControl subviews] lastObject] subviews] objectAtIndex:2] subviews] objectAtIndex:0]).text = @"Yes"; ((UILabel *)[[[[[[switchControl subviews] lastObject] subviews] objectAtIndex:2] subviews] objectAtIndex:1]).text = @"No";

Sin embargo, con el lanzamiento de iOS 4.2, esto ya no es compatible (probablemente Apple no lo recomendó de todos modos)

Mi cliente está insistiendo en los interruptores de sí / no. ¡Apreciaría cualquier consejo!

muchas gracias


Desde iOS 6, es posible especificar una imagen que se utilizará para los estados de activación / desactivación de UISwitch, pero NO el texto. Esto causará problemas cuando se requiere la internacionalización porque los traductores deben proporcionar un texto de imagen para cada idioma, no solo texto. Además, el tamaño de la imagen UISwitch es fijo, lo que limita la longitud del texto.

Debido a las razones anteriores, me gusta la respuesta de JSWilson: simple y flexible.

Para aliviar a los desarrolladores la necesidad de agregar manualmente los controles requeridos, codifiqué una clase de CRDScrollSwitch personalizada que puede encontrar en mi repositorio de GitHub: https://github.com/corerd/CRDScrollSwitch


La respuesta de Vladimir es excelente, pero en mi humilde opinión hay una implementación aún mejor aquí: https://github.com/domesticcatsoftware/DCRoundSwitch .

Además de configurar un texto personalizado, es más fácil cambiar el tamaño y el color del interruptor UIS y obtendrá un resultado más nítido.

Se libera bajo una licencia MIT. ¡Echar un vistazo!



Resulta que puedes crear un UISwitch personalizado con los siguientes elementos:

  • Un UIScrollView
  • Un botón
  • Dos UILabels
  • Una imagen de fondo
  • Un valor booleano

Primero tendrá que agregar QuartzCore.framework a su proyecto y #import <QuartzCore/QuartzCore.h> a su controlador de vista.

A continuación, agregue el UIScrollView a su vista usando Interface Builder. El ScrollView será su UISwitch personalizado. A continuación, agregue el botón y las dos etiquetas a su ScrollView. Una etiqueta será para "sí" y la otra para "no".

Agregue la imagen al botón y configure su tipo como personalizado. Esta es la imagen que uso:

Coloque las etiquetas sobre el área azul y blanca de la imagen. Ajuste ScrollView para que sea lo suficientemente grande como para mostrar la parte azul de la imagen y el nob.

Agregue la siguiente línea a viewDidLoad:

self.mySwitch.layer.cornerRadius = 13.5;

mySwitch es el nombre de ScrollView y 13.5 es la mitad de la altura de ScrollView. La declaración anterior cambia el ScrollView para redondear los extremos como el interruptor de UIS.

Para activar el interruptor personalizado, deberá vincular el evento "Retocar el interior" de los botones a una acción IBA. Aquí está el código que uso en el controlador de eventos:

-(IBAction)mySwitchButton:(id)sender { self.myValue = !self.myValue; CGPoint scrollPoint = CGPointMake((self.myValue)? 43.0: 0, 0.0); [mySwitch setContentOffset:scrollPoint animated:YES]; }

Donde myValue es la variable booleana que contiene el estado de su interruptor y 43.0 es la cantidad de puntos que tendrá que mover la imagen para poner el interruptor en la posición de apagado.

Eso es todo lo que hay que hacer!