我写了一个“代理”
Cocoa应用程序,我在文本框中的状态图标的菜单,它看起来像这样:
http://s3.ifotos.pl/img/Zrzut-ekr_hwaqnwa.png
当您使用步进器时,将值减少5.我想要当您将文本字段聚焦并且按“上”或“下”键时,相同的情况 – 值增加或减少5.
我已经弄清楚,我必须使用 – (BOOL)控件:(NSControl *)控件textView:(NSTextView *)fieldEditor doCommandBySelector:(SEL)commandSelector的NSControlTextEditingDelegate协议.
但是我真的很困惑我该怎么做通常我只会做sth.delegate = self;在这里我只是不知道.苹果文档的不友好的语言和我的英文不好,不能帮助我.我试图搜索一个答案,但所有人只是指出控制:textView:…和我的Google搜索能力失败,当我想知道如何使用这种委托方法.
非常感谢提前.请不要打我;)
解决方法
您需要创建一个对象作为文本字段的委托.这可以在代码中完成,或者在Interface Builder中可以完成.你可能已经有一个控制器负责这个领域和步进控制,所以这是一个很好的候选人.这个委托对象是需要实现你提到的方法:
- (BOOL)control:(NSControl *)control textView:(NSTextView *)fieldEditor doCommandBySelector:(SEL)commandSelector
每当field editor *的文本字段被要求执行NSResponder
action messages之一时,该方法将被调用.字段编辑器要求其委托,它是文本字段,它应该做什么,该字段又要求其委托,哪个是你的对象
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 }
*简而言之,一个NSTextView,当字段处于活动状态时,它处理代表文本字段的输入.