如果我将NSTokenField或NSTextField子类化并覆盖becomeFirstResponder(为了在控件成为第一响应者时执行某些代码),当该字段成为第一响应者时(如焦点环所示,并通过记录),光标不会'出现了。
-(BOOL)becomeFirstResponder {
// call other code here
NSLog(@"%@",[self.superview.window firstResponder]);
return YES;
}
由于此方法的默认实现返回YES,为什么像这样覆盖它会导致控件不显示光标。
答案 0 :(得分:2)
您必须致电[super becomeFirstResponder]
。覆盖它会中断调用链。 super
中的某个地方是对呼叫的调用,该呼叫为您显示光标。
注意:如果您调用super方法,则必须返回其返回值。所以你的方法看起来像:
- (BOOL) becomeFirstResponder {
if (someCondition) {
return NO;
}
BOOL retVal = [super becomeFirstResponder];
// do your stuff
return retVal;
}