1

我在NSTableView.

我通过双击它进入一个单元格。我在窗口上有其他按钮。每当我单击一个按钮时,这都会终止单元格编辑,因为我在单元格中什么都没有,并且 NSTableView 不会刷新,即使我调用[myTableView reloadData].

一种可能的解决方法是在我开始编辑单元格后立即禁用所有按钮,NSTableView但我不知道如何检测到这一点。

只要输入以下内容,我就可以捕获内容:

(void)controlTextDidBeginEditing:(NSNotification *)notification

但这不是我想要的,只是太晚了,因为它只有在用户输入单元格编辑器后才会被调用。

我想准确检测单元格编辑何时开始,即使尚未输入任何内容。

我看过一些可能有结果的帖子:

最好先让窗口成为​​ firstResponder (从而使 firstReponder 远离焦点区域),如果失败,则求助于 NSWindow 上粗略的“endEditingFor:”方法。

但这对我来说只是希腊语。任何帮助深表感谢。

4

2 回答 2

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];
}
于 2017-03-20T13:53:29.093 回答
-1

最后我做到了,这确实有帮助:

常见的解决方法是确保 NSTextFieldCell 不再是 firstResponder。在每个按钮触发的 ACTION 方法中,只需添加以下内容:

 program.h
 IBOutlet NSDatePicker        *dateDebut;

 program.m
 - (IBAction)currYear:(id)sender
 {
    [[dateDebut window] makeFirstResponder:dateDebut]; // or any other IBOutlet in the NSWindow
    ...
 }

这迫使单元格版本结束,以便我们得到一些干净的东西。

于 2014-04-18T10:37:21.763 回答