Привязать действие к UIButton - PullRequest
12 голосов
/ 13 февраля 2009

В моем AppController я загружаю вид со следующим кодом.

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

Вид позже добавляется в окно с кодом

[window addSubview:[settingsViewController view]];

Все работает нормально, но действие saveSettings не вызывается, когда я нажимаю кнопку во время использования отладчика. Свойство loginButton связано с кнопкой в ​​Интерфейсном Разработчике.

Вы видите что-то не так с этим кодом?

1 Ответ

20 голосов
/ 13 февраля 2009

Изменить IBOutlet на IBAction

- (IBAction) saveSettings:(id) sender

Это потому, что вы пытаетесь получить доступ к вашему объекту до вызова viewDidLoad. Вы должны подождать, пока не будет вызван viewDidLoad, для этого есть множество способов.

добавьте это в вашу функцию SettingViewController viewDidLoad

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

и это для вашего ViewController вы хотите получить доступ к кнопке

- (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];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...