Eik*_*chu 16 macos cocoa objective-c listener nstextfield
我试图了解如何从窗口中的文本字段中捕获"文本已更改"事件.我已经习惯了Java的"动作监听器",并且在Objective-C/Cocoa中找不到类似的东西.我搜索了很长一段时间并找到了"键值观察"协议,但是observeValueForKeyPath:方法(函数?)仅在我的文本字段的值在代码中更改时使用[textfield setStringValue:...](例如,使用),而不是通过键入来触发.
当用户键入文本字段时,如何"监听"值更改?
小智 36
您可以为NSTextField实例设置委托,并让委托实现以下方法:
- (void)controlTextDidChange:(NSNotification *)notification {
// there was a text change in some control
}
Run Code Online (Sandbox Code Playgroud)
您的委托对象可以是应用程序委托,窗口控制器,视图控制器或应用程序中的某个其他对象.代理可以通过编程方式设置
[myTextField setDelegate:delegateObject];
Run Code Online (Sandbox Code Playgroud)
或者,在Interface Builder中,通过控件中delegate提供的插座NSTextField.
请注意,如果有多个控件挂钩到同一个委托,那么-controlTextDidChange:将为每个控件发送,即,为不同的控件调用相同的方法.如果根据文本更改的控件需要不同的行为,则可以使用它-[NSNotification object]来标识已发送通知的控件.
举例来说,如果你有对应的出口两个文本字段nameField和addressField,并且已经设置了这两个字段,那么相同的委托:
- (void)controlTextDidChange:(NSNotification *)notification {
// there was a text change in some control
// [notification object] points to the control that has sent
// the notification
if ([notification object] == nameField) {
// nameField has changed
}
else if ([notification object] == addressField) {
// addressField has changed
}
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以为每个文本字段设置一个代理.在这种情况下,没有必要进行测试[notification object].
| 归档时间: |
|
| 查看次数: |
21215 次 |
| 最近记录: |