2009-02-13 19 views
12

En mi AppController estoy cargando una Vista con el siguiente código.Enlazar acción con UIButton

- (void) loadSettingsController { 
    settingsViewController = [[SettingsViewController alloc] initWithNibName:@"SettingsView" bundle:nil]; 
    UIButton *button = settingsViewController.loginButton; 
    [button addTarget:self action:@selector(saveSettings:) forControlEvents:UIControlEventTouchUpInside]; 
} 

- (IBOutlet) saveSettings:(id) sender 

La vista es más adelante añaden a la ventana con el código

[window addSubview:[settingsViewController view]]; 

Todo funciona bien, pero los SaveSettings de acción no se consiga llamar al pulsar el botón mientras se utiliza el depurador. La propiedad "loginButton" está conectada al botón en el Interface Builder.

¿Puedes ver algo malo con este código?

Respuesta

20

Cambio IBOutlet a IBAction

- (IBAction) saveSettings:(id) sender 

Es porque intenta acces su objeto antes viewDidLoad lo llamaron. debe esperar antes de llamar a viewDidLoad, existen numerosas formas de lograrlo.

Agregar a su función SettingViewController viewDidLoad

[[NSNotificationCenter defaultCenter] postNotificationName:@"SettingsViewDidLoad" object:nil]; 

y esto a su ViewController que desea acceder el botón

- (void) loadSettingsController { 
     settingsViewController = [[SettingsViewController alloc] initWithNibName:@"SettingsView" bundle:nil]; 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(initControls) name:@"SettingsViewDidLoad" object:nil]; 
} 

-(void)initControls{ 
     UIButton *button = settingsViewController.loginButton; 
     [button addTarget:self action:@selector(saveSettings:) forControlEvents:UIControlEventTouchUpInside]; 
} 
+0

Sí! Eso es estúpido de mi parte Solo que todavía no funciona después de corregirlo. – ullmark

+0

Gracias Andy y gracias por la explicación. – ullmark

Cuestiones relacionadas