2009-02-13 4 views
12

Dans mon AppController, je charge une vue avec le code suivant.Lier l'action à 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 vue est par la suite ajouté à la fenêtre avec le code

[window addSubview:[settingsViewController view]]; 

Tout fonctionne très bien, mais l'action SaveSettings ne soit pas appelé quand j'appuie sur le bouton tout en utilisant le débogueur. La propriété "loginButton" est connectée au bouton dans Interface Builder.

Pouvez-vous voir quelque chose de mal avec ce code?

Répondre

20

changement IBOutlet à IBAction

- (IBAction) saveSettings:(id) sender 

Il est parce que vous essayez de votre objet avant acces viewDidLoad été appelé. vous devez attendre avant que viewDidLoad soit appelé, il existe de nombreuses façons d'y parvenir.

Ajouter à votre fonction SettingViewController viewDidLoad

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

et ceci à votre l'ViewController vous voulez accéder au bouton

- (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

Oui! C'est stupide de ma part. Seulement, cela ne fonctionne toujours pas après l'avoir corrigé. – ullmark

+0

Merci Andy et merci pour l'explication. – ullmark