cocoa-touch - 将 Action 绑定(bind)到 UIButton

标签 cocoa-touch

在我的 AppController 中,我正在使用以下代码加载 View 。

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

该 View 稍后会使用代码添加到窗口中
[window addSubview:[settingsViewController view]];

一切正常,但是当我在使用调试器时按下按钮时,操作 saveSettings 不会被调用。 “loginButton”属性连接到 Interface Builder 中的按钮。

你能看出这段代码有什么问题吗?

最佳答案

将 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];
}

关于cocoa-touch - 将 Action 绑定(bind)到 UIButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/545721/

相关文章:

objective-c - 有没有办法从 UITableView 中删除分隔线?

iphone - 如何让 UITextView 在触摸其 UIView subview 后成为FirstResponder?

objective-c -/var/log/syslog 在 iOS 中等效?

ios - 嵌套核心数据获取

iphone - 用于在导航 Controller 中交换 ViewController 的分段控制

iphone - 将核心数据的属性的所有值加载到数组中

iphone - 从 iOS 的 Resources 文件夹中随机选择一个文件

ios - UIPanGestureRecognizer translationInView 总是返回一个相对点

ios - 没有要搜索的对象但有条件的二进制搜索 NSArray

iphone - drawRect 不反射(reflect)对图层所做的更改