我有一个 NSTableView,用户单击按钮来添加新行。这将转到 IBAction,该 IBAction 在 NSArrayController 中插入一个对象,然后使用 editColumn:row:withEvent:select: 将新行置于用户的编辑模式。
问题是,一旦 editColumn:row:withEvent:select: 被触发,表视图中的所有行都会变成灰色,即表视图失去焦点。我尝试在调用 editColumn 之前和之后重置第一响应者,但没有任何效果。一旦插入新行并且所有内容都变成灰色,我必须一次选择一行,然后它们的文本再次变成正常(黑色)。
如何以编程方式将行/列设置为编辑模式而不发生这种情况?
-(IBAction)addAttribute:(id)sender
{
TKSpecialObject *theObject = [TKSpecialObject new];
[self.myArrayController insertObject:theObject atArrangedObjectIndex:self.myArrayController.count];
[self.view.window makeFirstResponder:theTableView];
[self.myTableView editColumn:0 row:[self.myTableView selectedRow] withEvent:nil select:YES];
}
@Willeke 在上面的评论中指出,有一个关于此行为的线程 – NSArrayController“添加”函数现在会导致保存的 NSTableView 列出的条目暂时失去焦点。在该线程中,接受的答案指示您在 NSTextFieldCell 中子类化私有方法。但是,我不需要这样做,因为这只在编辑的单元格为空时才会发生。我只是将“untitled”的字符串值添加到绑定到单元格的对象的属性中,并且一切都按预期工作。
-(IBAction)addAttribute:(id)sender
{
TKSpecialObject *theObject = [TKSpecialObject new];
[TKSpecialObject setMyTitle:@"untitled"]; // added this line to fix
[self.myArrayController insertObject:theObject atArrangedObjectIndex:self.myArrayController.count];
[self.view.window makeFirstResponder:theTableView];
[self.myTableView editColumn:0 row:[self.myTableView selectedRow] withEvent:nil select:YES];
}