2011-04-14 12 views
7

Así que estoy tratando de insertar un botón que se puede alternar (¿es una palabra?) "No mostrar esto otra vez" dentro de un UIAlertView, pero me estoy metiendo en algunos problemas que puedo parece moverse.Cómo crear un UIButton personalizado dentro de UIAlertView

Aquí está mi código no trabaja hasta ahora ...

EDITADO: He añadido el método del botón, e hizo algunos cambios en el código original. Ahora obtengo el botón para reaccionar a la prensa pero el resultado es un bloqueo. ¿Alguna ayuda?

if (![[NSUserDefaults standardUserDefaults] objectForKey:@"disclaimer"]){ 


UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"DISCLAIMER" 
               message:@"This program is a blah blah" 
               delegate:self 
             cancelButtonTitle:nil 
             otherButtonTitles:@"I Agree", nil]; 

UILabel *alertLabel = [[UILabel alloc] initWithFrame:CGRectMake(30, 230, 260, 50)]; 
alertLabel.backgroundColor = [UIColor clearColor]; 
alertLabel.textColor = [UIColor whiteColor]; 
alertLabel.text = @"Do not show again"; 
[alert addSubview:alertLabel]; 
[alertLabel release]; 

//declared alertCheckboxButton in the header due to errors I was getting when referring to the button in the button's method below 
alertCheckboxButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
alertCheckboxButton.frame = CGRectMake(200, 247, 16, 16); 
alertCheckboxButton.backgroundColor = [UIColor clearColor]; 
UIImage *alertButtonImageNormal = [UIImage imageNamed:@"checkbox.png"]; 
UIImage *alertButtonImagePressed = [UIImage imageNamed:@"checkbox-pressed.png"]; 
UIImage *alertButtonImageChecked = [UIImage imageNamed:@"checkbox-checked.png"]; 
[alertCheckboxButton setImage:alertButtonImageNormal forState:UIControlStateNormal]; 
[alertCheckboxButton setImage:alertButtonImagePressed forState:UIControlStateHighlighted]; 
[alertCheckboxButton setImage:alertButtonImageChecked forState:UIControlStateSelected]; 
[alertCheckboxButton addTarget:self action:@selector(alertCheckboxButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; 

//made the button a subview of alert rather than alertLabel 
[alert addSubview:alertCheckboxButton]; 
[alert show]; 

//moved alertCheckboxButton release to (void)dealloc 
[alert release];  

} 


-(void)alertCheckboxButtonClicked{ 

if (![[NSUserDefaults standardUserDefaults] objectForKey:@"disclaimer"]){ 

    [[NSUserDefaults standardUserDefaults] setBool:TRUE forKey:@"disclaimer"]; 
    alertCheckboxButton.selected = YES; 
}else { 

    [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"disclaimer"]; 
    alertCheckboxButton.selected = NO; 
    } 

} 

Respuesta

1

Si desea que el botón sea como palanca a continuación, asignar una etiqueta a este botón, a continuación, en su caso prueba de funcionamiento para la etiqueta si es 0 luego otra vez en 1 y también estableció un BOOL allí. Cuando lo está agregando para alertar, luego verifique si el valor BOOL es verdadero, cambie la imagen del botón y también la etiqueta.

+0

¿Cómo cambio el estado del botón? EN mi código, no pasa nada si hago clic en él, es decir, no veo los png diferentes. Solo veo la misma imagen de control o normal. Sé cómo hacer esto usando IB, pero no sé cómo cambiar programáticamente el estado del botón. – Sam

0

Creo que simplemente quiere alternar la propiedad "seleccionada" de UIControl. Cuando "seleccionado" es SÍ es cuando se utilizará la imagen para UIControlStateSelected ...

El equivalente iOS típico de una casilla de verificación es el UISwitch, con su propiedad "on".

+0

Permítanme preguntar, ¿hay alguna manera mejor de mostrar una renuncia al lanzamiento que idealmente no se volvería a mostrar? (hasta una actualización o reinstalación o incluso algo así, supongo que borrará los valores predeterminados del usuario) ¿Es la hoja de cálculo u otra característica la forma más aceptada de hacerlo? ¿Estoy perdiendo mucho tiempo tratando de descubrir lo de este botón solo para tener algo que parece tonto al final y todos mis usuarios dicen "Ida acaba de hacerlo de esta manera ..."? – Sam

1

DUH! Mi código funciona Solo tuve que eliminar el: en @selector (alertCheckboxButtonClicked :)

¿No es siempre algo simple?

Cuestiones relacionadas