我在NSTableView
中有一些可编辑的单元格。
我双击它进入一个单元格。我的窗户上还有其他按钮。每当我点击一个按钮时,这就会终止单元格编辑,这样我就不会在单元格中得到任何内容,并且即使我调用[myTableView reloadData]
也不会刷新NSTableView。
一种可能的解决方法是在NSTableView
开始进行单元格编辑后立即禁用所有按钮,但我不知道如何检测到这一点。
我可以在输入内容后立即捕获:
(void)controlTextDidBeginEditing:(NSNotification *)notification
但这不是我想要的,但为时已晚,因为只有在用户输入单元格编辑器后才会调用它。
我想确切地检测细胞编辑何时开始,即使还没有输入任何内容。
我看过一些有可能结果的帖子:
最好先要求窗口成为第一个响应者(因此 将firstReponder从焦点区域移开,如果失败, 在NSWindow采用粗略的“endEditingFor:”方法。
但这对我来说只是希腊。非常感谢任何帮助。
答案 0 :(得分:1)
检测单元格的字段编辑器何时启动,等待输入的解决方案是覆盖单元格的setUpFieldEditorAttributes:
方法(然后调用其超级消息),像这样:
-(NSText *)setUpFieldEditorAttributes:(NSTextView *)textObj
{
NSTableView *table = (NSTableView*) self.controlView;
NSLog(@"editing starts in row %d col %d", (int)table.editedRow, (int)table.editedColumn);
return [super setUpFieldEditorAttributes:textObj];
}
答案 1 :(得分:-1)
最后我做了这个,这确实有帮助:
常见的解决方法是确保NSTextFieldCell不再是第一个响应者。 在每个按钮触发的ACTION方法中,只需添加:
program.h
IBOutlet NSDatePicker *dateDebut;
program.m
- (IBAction)currYear:(id)sender
{
[[dateDebut window] makeFirstResponder:dateDebut]; // or any other IBOutlet in the NSWindow
...
}
这会强制单元格版本的结束,以便我们获得干净的东西。