子类文本字段和标记字段不显示光标

时间:2012-08-04 04:16:33

标签: objective-c cocoa nstextfield

如果我将NSTokenField或NSTextField子类化并覆盖becomeFirstResponder(为了在控件成为第一响应者时执行某些代码),当该字段成为第一响应者时(如焦点环所示,并通过记录),光标不会'出现了。

-(BOOL)becomeFirstResponder {
    // call other code here
    NSLog(@"%@",[self.superview.window firstResponder]);
    return YES;
}

由于此方法的默认实现返回YES,为什么像这样覆盖它会导致控件不显示光标。

1 个答案:

答案 0 :(得分:2)

您必须致电[super becomeFirstResponder]。覆盖它会中断调用链。 super中的某个地方是对呼叫的调用,该呼叫为您显示光标。

注意:如果您调用super方法,则必须返回其返回值。所以你的方法看起来像:

- (BOOL) becomeFirstResponder {
     if (someCondition) {
         return NO;
     }
     BOOL retVal = [super becomeFirstResponder];
     // do your stuff
     return retVal;
}