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、カーソルを表示する呼び出しへの呼び出しがあります。

注:スーパー メソッドを呼び出す場合は、その戻り値を返す必要があります。したがって、メソッドは次のようになります。

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