当用户添加一个新的托管对象时,它会显示在一个表格中,该表格向下滚动到新条目,并且新对象的名称(默认值)进入编辑模式。
我需要检查新对象的名称在数据存储中是否唯一,因此我不能为此使用格式化程序。我认为我应该验证这一点的最佳时机是,每当用户尝试提交条目的名称值时,使用textShouldEndEditing:
.
我NSTableView
对以下方法进行了子类化和覆盖,只是为了能够在它们被调用时检查日志。
- (BOOL)textShouldEndEditing:(NSText *)textObject {
NSLog(@"textSHOULDendEditing fired in MyTableView");
return [super textShouldEndEditing:textObject];
}
- (BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor {
NSLog(@"control:textShouldEndEditing fired in MyTableView");
return YES;
}
- (void)textDidEndEditing:(NSNotification *)aNotification {
NSLog(@"textDIDEndEditing fired in MyTableView");
}
textDidEndEditing:
被称为罚款,但textShouldEndEditing:
没有。
在NSTableView 类参考中,在 Text Delegate Methods 下,列出了两个方法textShouldEndEditing:
和。textDidEndEditing:
有人请解释为什么一个被调用而另一个没有。
我认为NSTableView
充当代理的行为NSTextField
被实例化为. 所以在NSTableView 类参考中所说的委托方法,实际上是实现了对象的文本操作方法。NSTextFieldCell
NSTextField
我试图NSTextFieldCell
在我的NSTableView
. 我还尝试在NSTableView
.
#import <AppKit/AppKit.h>
#import <Cocoa/Cocoa.h>
@interface MyTableView : NSTableView <NSTextDelegate, NSTextFieldDelegate, NSControlTextEditingDelegate, NSTableViewDelegate, NSTableViewDataSource> {
}
@end
别笑,我什至尝试将我的表格视图声明为它自己的委托:P