Pregunta

En un esfuerzo aparentemente interminable para aprender más sobre el desarrollo del iPhone, he estado jugando con una parte del código fuente disponible en el sitio web manzanas desarrollador. El ejemplo particular que estoy trabajando con es de Datos Básicos de Libros, encontró aquí . El DetailViewController y el AddViewController se realizan mediante programación, porque no hay ningún archivo xib para ellos. Mi pregunta es sobre programáticamente agregando cosas a una vista sin necesidad de utilizar IB. Quiero poner un UISwitch debajo de la UITableView que tiene la información detallada acerca de un libro en particular en el DetailView. ¿Cómo hago esto? Esto es lo que he probado hasta ahora:

En el AddViewController, I fijó la UISwitch:

@interface AddViewController : DetailViewController {
id <AddViewControllerDelegate> delegate;
UISwitch *onoff;

 }

@property (nonatomic, assign) id <AddViewControllerDelegate> delegate;
@property (nonatomic, retain) IBOutlet UISwitch *onoff;

También configurar una IBAction:

- (IBAction)flip:(id)sender;

Entonces sintetizarlo en el archivo AddViewController.m, pero no pasa nada. Sólo necesito para configurar el interruptor y hacerlo de modo que puedo controlar lo que hace de mi IBAction que la configuración. Sé que esto es vergonzosamente simple, pero no puedo entenderlo. ¡Por lo que cualquier ayuda se agradece! Gracias

Editar 1

Así que implementa el código como me dirigieron a la viewDidLoad, así:

   - (void)viewDidLoad {

[super viewDidLoad];    
  UISwitch *onoff = [[UISwitch alloc] initWithFrame: CGRectZero];
[onoff addTarget: self action: @selector(flip:) forControlEvents:UIControlEventValueChanged];
// Set the desired frame location of onoff here
[self.view addSubview: onoff];

Y lanza dos advertencias diciendo que la declaración local de 'onoff' oculta la variable de instancia. Sin embargo, a pesar de que existen esas ganancias, la UISwitch aparece muy bien, pero cuando lo muevo, o lo uso, no se ve como que está funcionando plenamente. Para mi acción que tiene este aspecto:

- (IBAction)flip:(id)sender {
if (onoff.on) NSLog(@"On");  
else  NSLog(@"Off");  
 }

Cada vez que el interruptor está encendido, la consola debe leer, y cuando su apagado, la consola debe leer fuera. ¿Derecho? Cada vez que lo muevo, sólo se repite en la consola, fuera. Si su encendido, o si su lugar, sólo se muestra. Lo que en el mundo estoy haciendo mal? ¡Por favor ayuda! Gracias

¿Fue útil?

Solución

El compilador está tratando de ayudarte. Usted está anulando la variable de instancia onoff en su viewDidLoad; por lo tanto, eso nunca conseguir crear. En su -flip: método, se está haciendo referencia a un controlador nula. Hay dos maneras de solucionar este problema:

(a) Se puede olvidarse de la declaración local de onoff, y sólo tiene que utilizar la variable de instancia

(b) Reparto de la discusión remitente a -flip: como UISwitch, y tener acceso a lo siguiente:

- (IBAction) flip: (id) sender {
    UISwitch *onoff = (UISwitch *) sender;
    NSLog(@"%@", onoff.on ? @"On" : @"Off");
}

Otros consejos

Steve, lo siento si no he entendido bien su pregunta. ¿Realmente cree el UISwitch y añadirlo a la jerarquía de la vista? -loadView o -viewDidLoad aplicación del controlador debe tener un código como el siguiente:

// Use the ivar here
onoff = [[UISwitch alloc] initWithFrame: CGRectZero];
[onoff addTarget: self action: @selector(flip:) forControlEvents: UIControlEventValueChanged];
// Set the desired frame location of onoff here
[self.view addSubview: onoff];
[onoff release];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top