Wal*_*ker 10 cocoa objective-c
我在表视图中有一个文本字段单元格,在结束编辑时我需要知道它.我以为我会将我的Controller类设置为文本字段单元的委托,然后使用NSTextField的委托方法textDidEndEditing:,但是意识到文本字段单元似乎没有委托方法?为什么这样,在编辑完成后我能做什么(除了子类化)?
谢谢
Ale*_*ski 15
NSTextFieldCell继承自NSCell(从技术上NSActionCell继承自NSCell).所述NSCell类用于(从文档):
NSCell类提供了一种在NSView对象中显示文本或图像的机制,而不需要完整NSView子类的开销.
值得注意的是,单元类用于"显示文本或图像",而不是处理与用户的交互.同样,与NSTextField班级:
NSTextField类使用NSTextFieldCell类来实现其用户界面.
在NSTextField实际用户输入的交易,同时使用文本字段细胞简单地实现它的用户界面,同样,委托方法时,通过提供的已经结束的文本编辑提供的通知NSTextField类,并没有通过NSTextFieldCell类.
如果您希望在编辑结束时收到通知NSTableView,那么您需要将自己注册为观察者NSTextDidEndEditingNotification(如果您不熟悉通知,则可能需要阅读NSNotificationCenter类参考).为此,请将以下内容放在控制器类中; 该awakeFromNib函数是一个包含它的好地方,以确保在应用程序启动时调用它:
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self
selector:@selector(textDidEndEditing:)
name:NSTextDidEndEditingNotification
object:tableView];
Run Code Online (Sandbox Code Playgroud)
tableView指向NSTableView对象的指针在哪里.然后,只需实现如下方法:
- (void)textDidEndEditing:(NSNotification *)aNotification
{
// Do what you want here
}
Run Code Online (Sandbox Code Playgroud)
在解除分配时不要忘记将自己移除为观察者:
- (void)dealloc
{
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc removeObserver:self];
}
Run Code Online (Sandbox Code Playgroud)
将您正在观察的对象设置为NSTableView实例(而不是单元本身)的原因在于,当您在表中编辑单元格时,您正在处理的单元格不会直接编辑; 它是窗口(或自定义)字段编辑器.编辑结束时,字段编辑器然后将该单元格的新值传递给表视图.但是,表视图将发布通知,表示单元格已完成编辑.
| 归档时间: |
|
| 查看次数: |
3401 次 |
| 最近记录: |