我刚刚实现了以下方法,该方法假设在 NSOutlineView 中的 NSTextField 值更改后采取一些操作
-(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 的 textDidEndEditing: 方法。 请务必调用 super。
因此,您需要对 NSOutlineView 进行子类化,并在您的子类中:
- (void)textDidEndEditing:(NSNotification *)aNotification
{
// do your stuff
[super textDidEndEditing:aNotification];
}
关于objective-c - NSOutlineTableView 中的 textShouldEndEditing 被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20752811/