2009-02-13 36 views
12

Trong AppController của tôi, tôi đang tải Chế độ xem có mã sau đây.Liên kết Hành động với 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 

Quan điểm là sau này thêm vào cửa sổ với mã

[window addSubview:[settingsViewController view]]; 

Tất cả mọi thứ hoạt động tốt, nhưng saveSettings hành động không được gọi khi tôi bấm nút khi sử dụng trình gỡ lỗi. Thuộc tính "loginButton" được kết nối với nút trong Trình tạo giao diện.

Bạn có thấy điều gì sai với mã này không?

Trả lời

20

Thay đổi IBOutlet để IBAction

- (IBAction) saveSettings:(id) sender 

Đó là bởi vì bạn cố gắng để acces đối tượng của bạn trước khi viewDidLoad được gọi tới. bạn phải đợi trước khi viewDidLoad được gọi, có rất nhiều cách để đạt được điều đó.

thêm video này vào SettingViewController viewDidLoad chức năng của bạn

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

và điều này cho ViewController của bạn, bạn muốn truy cập vào nút

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

Có! Đó là ngu ngốc của tôi. Chỉ có nó vẫn không hoạt động sau khi sửa nó. – ullmark

+0

Cảm ơn Andy và cảm ơn lời giải thích. – ullmark

Các vấn đề liên quan