La creación de un UISwitch mediante Programación

En una aparentemente interminable esfuerzo por aprender más sobre el desarrollo de iphone, he estado jugando con algunos de los código fuente disponible a través de las manzanas de desarrollador web. El ejemplo concreto en el que estoy trabajando es con los Datos principales de los Libros, encontró aquí. El DetailViewController, y el AddViewController se realizan a través de programación, porque no hay ningún xib archivos para ellos. Mi pregunta es acerca de programáticamente a añadir cosas a un ver sin el uso de IB. Quiero poner un UISwitch debajo de la UITableView que tiene la información detallada acerca de un libro en particular en la vista de detalles. ¿Cómo puedo hacer esto? Esto es lo que he intentado hasta ahora:

En el AddViewController, tengo que instalar el UISwitch:

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

 }

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

Yo también la configuración de un IBAction:

- (IBAction)flip:(id)sender;

Luego me sintetizar en el AddViewController.m archivo, pero no pasa nada. Solo me falta configurar el interruptor y hacer que por lo que yo puedo controlar lo que hace de mi IBAction que me la instalación. Sé que esto es vergonzosamente simple, pero no puedo averiguar. Por lo tanto, cualquier ayuda se agradece! Gracias

Editar 1

Por lo que he implementado el código como me fue dirigida en el 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 de «onoff» se oculta la variable de instancia. Pero a pesar de que no son los ingresos, la UISwitch aparece bien, pero cuando me muevo, o el uso, no como la que está funcionando plenamente. Para mi la acción que se parece a esto:

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

Cuando el interruptor está activado, la consola debería leer, y cuando apagado, la consola debe leer. A la derecha? En cualquier momento puedo mover, que sólo se repite en la consola, apagado. Si su sobre, o si sus off, sólo se muestra. ¿Qué estoy haciendo mal? Por favor, ayuda! Gracias

  • ¿Por qué no utilizar IB? Y si no lo está utilizando, entonces, ¿por qué son las cosas declarado como IBOutlet y IBAction?
  • Wow. Gran punto. De hecho, me encantaría usar IB, pero como he mencionado, estoy tratando de conseguir que esto funcione, en una vista que no es el uso de IB. Hay una manera fácil de agregar un archivo xib una pantalla en la que se acaba de rellenar un uitableview y mostrando las células de la información? Gracias
InformationsquelleAutor Steve | 2010-01-08

2 Kommentare

  1. 29

    El compilador está tratando de ayudarle a cabo. Estás anulando la onoff variable de instancia en su viewDidLoad; por lo tanto, que nunca se establece. En su vuelta: método, se está haciendo referencia a un nil controlador. Hay dos formas de solucionarlo:

    (a) de deshacerse de los locales de la declaración de onoff, y sólo tiene que utilizar su variable de instancia

    (b) Emitir el remitente argumento-flip: como UISwitch, y el acceso que:

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

    Steve, lo siento si no he entendido tu pregunta. ¿Usted realmente cree la UISwitch y agregarlo a la vista de la jerarquía? El controlador del -loadView o -viewDidLoad aplicación 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];
    • Hey muchas gracias por su ayuda. Esto hizo que el UISwitch muestran, lo cual es genial! Pero, no parece estar funcionando plenamente, por favor ver mi edición anterior para el código. Gracias
    • Lo siento por el error estúpido. He fijado (véase Ben Gottlieb comentarios).

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea