objective-c – 捕获NSTextField中的“up”和“down”键

我写了一个“代理” 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,当字段处于活动状态时,它处理代表文本字段的输入.

相关文章

/** C+⬑ * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录<future>future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...