Pregunta

Así que he creado una costumbre TableViewCell, y en la punta pongo un UISwitch. Antes incluso de que había enganchado hasta cualquier cosa, si me encontré en el simulador y clic en él, sería cambiar de apagado a encendido con la animación y tal.

Estoy tratando de agregar una función donde el usuario sólo se le permite cambiar de apagado a encendido cuando una determinada condición es verdadera. Lo quiero así, cuando el usuario toca el interruptor, comprueba si la condición es verdadera, y si no es que el interruptor no se mueve.

He creado un IBAction donde si el usuario toca en el interior, que va a ejecutar mi función. Mi función es la siguiente:

if([on_switch isOn])
    {
        if([my_switch canSwitchOn])
        {
            NSLog(@"SWITCHED ON SUCCESSFULLY");
            [on_switch setOn:TRUE animated:TRUE];
        }
        else
        {
            NSLog(@"SWITCHED ON UNSUCCESSFULLY");
                        //Put in popup here
        }
    }
    else
    {
        [[ClassesSingleton sharedSingleton] classSwitchedOff:cell_index];
        [on_switch setOn:FALSE animated:TRUE];
    }

Sin embargo, no importa lo que hago, que el interruptor le dará la vuelta, a pesar de que no dio instrucciones para hacerlo. Estoy bastante seguro de que es la auto-flip que causan que haga lo que incluso antes de que hubiera enganchado nada a la altura. ¿Hay una manera de apagar eso?

Gracias!

¿Fue útil?

Solución

Lo que hay que hacer es establecer la propiedad userInteractionEnabled en False en su UISwitch.

Si se hubiera hecho ya fuiste la conexión en Interface Builder a una IBOutlet que delared en su clase propietaria, que sería capaz de establecer en código como el siguiente:

mySwitch.userInteractionEnabled = NO;

También puede establecer la propiedad directamente en el Interface Builder, seleccionando la casilla de verificación, como se muestra a continuación (Sin embargo, en su aplicación, se le va a tener que cablear el botón hasta una IBOutlet de todos modos para poner en práctica su lógica condicional.) texto alternativo http://www.clixtr.com/photo/ef06c1f7- 8cca-40CD-a454-5ca534ceb9fe

Otros consejos

Creo que se necesita algo como lo siguiente:

// Somewhere just after the creation of _switch
[_switch addTarget:self action:@selector(switchValueDidChange:) forControlEvents:UIControlEventValueChanged];

// Target/Action method
- (void)switchValueDidChange:(UISwitch *)sender {
    if(sender.on && [self canSwitchOn] == NO){
        [sender setOn:NO animated:YES];
        // Popup
    }
}

problema que tiene es que el interruptor ya se ha comprometido está en estado de retoque. Cuando eso no es el caso (no estoy seguro, nunca se probó) usted tiene que comprobar si el interruptor está actualmente no activado. Este fragmento de código se revertirá el estado cuando el usuario no se le permitió cambiar el interruptor.

Una mejor manera es desactivar el control, pero tal vez eso no es lo que desea en este caso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top