0

如果我继承 NSTokenField 或 NSTextField 并覆盖 becomeFirstResponder (为了在控件成为第一响应者时执行一些代码),当该字段成为第一响应者时(如焦点环和日志所示),光标不会出现。

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

既然这个方法的默认实现返回YES,为什么像这样重写它会导致控件不显示光标。

4

1 回答 1

2

你必须打电话[super becomeFirstResponder]。覆盖它会中断调用链。在某处super是对显示光标的调用的调用。

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

- (BOOL) becomeFirstResponder {
     if (someCondition) {
         return NO;
     }
     BOOL retVal = [super becomeFirstResponder];
     // do your stuff
     return retVal;
}
于 2012-08-04T04:18:13.637 回答