1

我想要一个带有 1 个字符串列的简单表,该表使用返回键添加新行。如果用户也清除特定行上的文本,我也想删除一行。

我已经设法用这个方法添加了一个带有返回键的新行:

-(BOOL)control:(NSControl*)control textView:(NSTextView*)textView doCommandBySelector:(SEL)commandSelector{
if (commandSelector == @selector(insertNewline:)) {
    [self returnKey];
    return YES;
}
else if(commandSelector == @selector(moveUp:)){
    [self tableMoveUp];
    return YES;
}
else if(commandSelector == @selector(moveDown:)){
    [self tableMoveDown];
    return YES;
}
else{
    NSLog(@"%@", NSStringFromSelector(commandSelector));
}

return NO;

}

当用户清除一行上的文本并按回车键时,问题是删除一行。在将表上的实际更改保存到数据源之前调用此方法。我试过在这样的列上获取 dataCell:

NSTextFieldCell *cell = [self.tableView.tableColumns[0] dataCell];
NSLog(@"%@",cell.stringValue);

但是 stringValue 不准确。关于如何实现这一目标的任何想法?谢谢!

4

1 回答 1

0

由于每行都重复使用表格列的数据单元格(设置其值并在绘制、起泡、冲洗、重复时将其“标记”到位),因此放置这种代码的地方很奇怪。“stringValue 不准确”的观察是这方面的一个重要线索——它将被设置为单元格最后用于绘制的任何值,这是不能也不应该确定的。

为什么不让数据源管理它?当 -tableView:setObjectValue:forTableColumn:row: 被调用时,检查 obj 是否为空字符串/nil/whatever,然后删除该行并重新加载。“清空此单元格”是用户操作;表视图处理它并让其数据源(控制器)知道用户何时提交更改。

如果您想要“删除/退格删除行”,则自定义 NSTextFieldCell 以发送“MyTableRowWasDeleted”通知,您的数据源可以观察并采取适当的步骤来结束编辑并删除“空”行,然后重新加载。

于 2013-05-03T20:36:51.077 回答