Objective c NSOutlineTableView中的TextShoulDediting将被调用两次
我刚刚实现了以下方法,该方法假设在NSOutlineView中更改NSTextField的值后采取一些操作Objective c NSOutlineTableView中的TextShoulDediting将被调用两次,objective-c,macos,cocoa,nstextfield,Objective C,Macos,Cocoa,Nstextfield,我刚刚实现了以下方法,该方法假设在NSOutlineView中更改NSTextField的值后采取一些操作 -(BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor { NSLog(@"end editing"); NSTextField* tf = (NSTextField*)control; if(selectedItem && [selectedIt
-(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;
}
但是,当我完成编辑并按enter键或在文本字段之外的任何位置导航时,该方法将被调用两次而不是一次
有人知道这是为什么吗
非常感谢您的任何帮助 该例行程序并不意味着编辑已结束。相反,调用它是为了确定它是否应该结束(因此方法的名称)。框架可以多次调用它,您不应该为此依赖它 而是重写NSOutlineView的textdidediting:方法。 一定要打超级电话 因此,您将对NSOutlineView进行子类化,并在子类中:
- (void)textDidEndEditing:(NSNotification *)aNotification
{
// do your stuff
[super textDidEndEditing:aNotification];
}
嗨,肯,谢谢你的回答!我试图按照您建议的方式实现它,但出于某种原因,textdidediting:在我的OutlineView中没有被调用…您知道可能存在什么问题吗?您是否记得将nib中outline视图的类更改为您的子类?