2013-12-23 47 views
1

我只是實現以下是想採取一些行動的NSTextField的值在我NSOutlineView改變textShouldEndEditing在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

該例程並不表示該編輯已結束。相反,它被稱爲找出它是否應該結束(因此方法的名稱)。它可以被框架多次調用,並且你不應該爲此而依賴它。

改爲覆蓋NSOutlineView的textDidEndEditing:方法。 一定要打電話過來。

所以,你會子類NSOutlineView和子類:

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

    [super textDidEndEditing:aNotification]; 

} 
+0

嗨肯,感謝您的回答!我試圖按照你提出的方式來實現它,但出於某種原因,textDidEndEditing:沒有在我的OutlineView中調用...你知道什麼可能是問題嗎? –

+0

您是否記得將您的筆尖中的大綱視圖的類更改爲您的子類? –

+0

是的......這樣做是正確的... –