rad*_*dex 11 cocoa objective-c nstextfield
我写了一个"Agent"Cocoa应用程序,我在状态图标的菜单中有TextField,它看起来像这样:
http://s3.ifotos.pl/img/Zrzut-ekr_hwaqnwa.png
当您使用步进器时,值inc- /减少5.我希望当您有文本字段聚焦并按"向上"或"向下"键时,同样的情况发生 - 值增加或减少5.
我已经想通了,我必须使用- (BOOL)control:(NSControl *)control textView:(NSTextView *)fieldEditor doCommandBySelector:(SEL)commandSelector的NSControlTextEditingDelegate协议.
但我真的很困惑,我是怎么做到的.通常我会这样做sth.delegate = self;,在这里我只是不知道.苹果文档的不友好语言和我糟糕的英语对我没有帮助.我试图寻找答案,但所有人只是指出,control:textView:...当我想弄清楚如何使用这种委托方法时,我的Google搜索功能失败了.
感谢很多提前.请不要打败我;)
Jos*_*ell 19
您需要创建一个对象作为文本字段的委托.这可以在代码中完成,如果合适,也可以在Interface Builder中完成.你可能已经有一个控制器负责这个字段和步进控制,所以这是一个很好的候选人.这个委托对象需要实现你提到的方法:
- (BOOL)control:(NSControl *)control textView:(NSTextView *)fieldEditor doCommandBySelector:(SEL)commandSelector
Run Code Online (Sandbox Code Playgroud)
只要要求文本字段的字段编辑器*执行其中一个NSResponder操作消息,就会调用此方法.字段编辑器询问其委托,即文本字段,它应该做什么,并且字段依次询问其委托,哪个是您的对象.
该commandSelector参数包含操作消息的名称.因此,你可以测试你有兴趣(消息moveUp:和moveDown:在这种情况下),并拦截下来.您执行任何您喜欢的操作,并阻止字段编辑器或文本字段对邮件执行操作.
- (BOOL)control:(NSControl *)control textView:(NSTextView *)fieldEditor
doCommandBySelector:(SEL)commandSelector {
if( commandSelector == @selector(moveUp:) ){
// Your increment code
return YES; // We handled this command; don't pass it on
}
if( commandSelector == @selector(moveDown:) ){
// Your decrement code
return YES;
}
return NO; // Default handling of the command
}
Run Code Online (Sandbox Code Playgroud)
*简而言之,NSTextView当字段处于活动状态时,代表文本字段处理输入.
| 归档时间: |
|
| 查看次数: |
4723 次 |
| 最近记录: |