NSTextField子类不尊重-acceptsFirstResponder?

时间:2012-08-27 17:10:12

标签: cocoa subclass nstextfield first-responder

我正在使用NSTextFields并启用/禁用选择和编辑,我在示例应用程序中遇到了一些奇怪的行为。我有一个名为MyTextField的NSTextField子类;这个子类唯一能做的就是在被要求时拒绝第一响应者状态,如:

@interface MyTextField : NSTextField
@end

@implementation MyTextField
- (BOOL)acceptsFirstResponder {
    return NO;
}
@end

但是,当我将此文本字段的实例放在.xib中,然后启动应用程序时,我仍然可以单击文本字段并开始编辑它。文本字段是否忽略-acceptsFirstResponder的返回值?

我尝试了几件事来解决这个问题:

  • 文本字段的类已正确设置为MyTextField而不是.xib中的NSTextField
  • 如果我在NSLog之前放置return声明,则会按预期打印到控制台
  • 如果我为NO返回-becomeFirstResponder,则表现出相同的行为:我仍然可以编辑该字段
  • 如果我在视图控制器中调用[myTextField setSelectable:NO],它可以正常工作:我无法再点击该字段
    • 但是,如果我从NO-isSelectable(未明确调用-isEditable)返回-setSelectable:,我仍然可以在字段中选择文字(并编辑)

这里发生了什么?

1 个答案:

答案 0 :(得分:2)

我不确定这一点,但我认为这与第一个响应者实际上不是文本字段,而是字段编辑器这是一个特殊的(不可见的)文本视图对象这一事实有关。请查看Apple文档中“文本编辑编程指南”的“使用字段编辑器”部分,以查看解释。