如何知道NSTableView是否正在编辑?

时间:2012-12-07 07:19:04

标签: objective-c macos nstableview editing

我想检查我的NSTableView是否正在编辑中。

我尝试使用 tableView:shouldEditTableColumn:row: tableView:setObjectValue:forTableColumn:row:函数。例如:

- (BOOL)tableView:(NSTableView *)tableView shouldEditTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
     isRenaming = YES;
     return YES;
}

- (void)tableView:(NSTableView *)tableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
     isRenaming = NO;

     ...

}

但是,即使我没有尝试编辑tableview,也会调用 tableView:shouldEditTableColumn:row:函数。

因此,有时,isRenaming仍为YES。

如何知道NSTableView是否正在编辑?

3 个答案:

答案 0 :(得分:1)

将视图控制器设置为表格视图单元格中文本视图的委托。

然后,当用户触发[control: textShouldBeginEditing:] protocol method时,您可以设置“isRenaming = YES”。您还可以在用户完成编辑时(或者在用户界面中点击“完成”或“保存更改”按钮时)设置“isRenaming = NO”。

答案 1 :(得分:0)

最后,我找到了遗失的案例。

在NSTableView上发生双击事件时,

tableView:shouldEditTableColumn:row:”函数被调用。

所以,

- (void)tableViewDoubleClicked:(id)sender {
       isRenamed = NO;
       ...
}

它解决了这个问题。

答案 2 :(得分:0)

为什么不检查edited​Row

let isBeingEdited = yourTable.edited​Row != -1
  

此属性不适用于基于视图的表视图。在基于视图的表视图中,视图负责自己的编辑行为。对于其他表,该值反映正在编辑的行的索引,或者在没有正在进行的编辑会话时为-1。