NSTableCellView setEditable

时间:2014-11-25 20:19:41

标签: xcode macos cocoa nstableview nsmenu

我正在使用菜单项将列文本字段设置为可编辑。这就是我尝试过的,但根本没有回应(没有文字可编辑)。 (我已经记录,并且调用了该方法,并且textfield不为null。)

- (IBAction)setEditable:(id)sender
{
    NSInteger selectedRow = [_tableView selectedRow];
    NSInteger selectedColumn = [_tableView selectedColumn];

    NSTableCellView *selectedCell = [_tableView viewAtColumn:selectedColumn row:selectedRow makeIfNecessary:NO];

    [selectedCell.textField setEditable:YES];
}

这是否必须以另一种方式完成?文本字段在IB中也设置为可编辑,因此双击它可以工作,但我也想在上下文菜单中选择该项。

1 个答案:

答案 0 :(得分:1)

文本字段是“可编辑的”,如果可能进行编辑,那就是让它集中注意力。 -setEditable:不会启动编辑,这是您似乎认为的,因为您希望上面的代码与双击字段相同。它只是在文本字段上设置一个标志,用于控制文本字段允许执行的操作。您可以使用-isEditable检查标记。

如果要启动编辑,则应使用以下文本字段作为窗口的第一个响应者:

if ([selectedCell.textField acceptsFirstResponder])
    [_tableView.window makeFirstResponder:selectedCell.textField];

如果在窗口不是键时可以调用您的操作方法,您可能还想先[_tableView.window makeKeyAndOrderFront:self]