Текстовое поле подкласса и поле токена не отображают курсор

Если я создаю подкласс NSTokenField или NSTextField и переопределяю beFirstResponder (с целью выполнения некоторого кода, когда элемент управления становится первым ответчиком), когда поле становится первым ответчиком (как указано кольцом фокуса и ведением журнала), курсор не появляется.

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

Поскольку реализация этого метода по умолчанию возвращает YES, почему его переопределение приводит к тому, что элемент управления не отображает курсор.


person rdelmar    schedule 04.08.2012    source источник


Ответы (1)


Вы должны позвонить [super becomeFirstResponder]. Его переопределение прерывает цепочку вызовов. Где-то в super есть вызов вызова вызова, который показывает курсор для вас.

Примечание. Если вы вызываете суперметод, вы должны вернуть его возвращаемое значение. Таким образом, ваш метод будет выглядеть так:

- (BOOL) becomeFirstResponder {
     if (someCondition) {
         return NO;
     }
     BOOL retVal = [super becomeFirstResponder];
     // do your stuff
     return retVal;
}
person Dan Rosenstark    schedule 04.08.2012
comment
Спасибо, это должно быть очевидно, но я полностью пропустил это. - person rdelmar; 04.08.2012
comment
Это совсем не очевидно благодаря Xcode, который не заполняет это автоматически. - person Dan Rosenstark; 04.08.2012