2013-12-23 3 views
1

я просто реализован следующий метод, который предполагают, чтобы принять какое-либо действие после того, как значение NSTextField изменяется в моей NSOutlineViewtextShouldEndEditing в NSOutlineTableView становится вызывается дважды

-(BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor 
{ 
    NSLog(@"end editing"); 
    NSTextField* tf = (NSTextField*)control; 

    if(selectedItem && [selectedItem isKindOfClass:[HSCategoryClass class]]) 
    { 
     HSCategoryClass* c = selectedItem; 
     c.name = tf.stringValue; 

     // request the update from DB 
     [[NSNotificationCenter defaultCenter] postNotificationName:@"updatingCategoryName" 
                  object:c 
               userInfo:@{@"sender":self}]; 
    } 
    return YES; 
} 

Однако, когда я сделал редактирования и нажмите клавишу ВВОД или перемещаться в любом месте за пределами текстового поля, этот метод получает вызов дважды, а не один раз.

Кто-нибудь знает, почему это так ?!

Любая помощь очень ценится!

ответ

2

Эта процедура не означает, что редактирование закончилось. Вместо этого он призван выяснить, должен ли он заканчиваться (отсюда и название метода). Он может быть вызван каркасом любое количество раз, и вы не должны полагаться на него для этой цели.

Вместо этого переопределите метод TextDidEndEditing: NSOutlineView. Обязательно позвоните супер.

Так вы подкласс NSOutlineView и в подклассе:

- (void)textDidEndEditing:(NSNotification *)aNotification 
{ 
    // do your stuff 

    [super textDidEndEditing:aNotification]; 

} 
+0

Привет Кен, спасибо за Ваш ответ! Я попытался реализовать его так, как вы предлагаете, но по какой-то причине textDidEndEditing: не получает вызов в моем OutlineView ... знаете ли вы, что может быть проблемой? –

+0

Не помните, чтобы вы изменили класс контура в своем nib, чтобы быть вашим подклассом? –

+0

да ... это сделано правильно ... –

Смежные вопросы