NSTableView通过清除文本删除行
问题描述:
我想要一个带有1个字符串列的简单表格,通过使用返回键添加一个新行。 另外我想删除一行,如果用户也清除特定行上的文本。NSTableView通过清除文本删除行
我已经成功地添加一个新行用这个方法返回键:
-(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不准确。 关于如何实现这一点的任何想法? 谢谢!
答
由于表格列的数据单元被重复用于每一行(设置它的值并在绘图,泡沫,冲洗,重复时将其“设置”),这是放置这种类型代码的奇怪之处。 “stringValue不准确”的观察是一个很大的线索 - 它将被设置为单元格上次绘制的任何值,而不能也不应该被确定。
为什么不让数据源管理它?当-tableView:setObjectValue:forTableColumn:row:被调用时,检查obj是否为空string/nil/whatever,然后移除该行并重新加载。 “清空这个单元格”是一个用户操作;表视图处理它,并让其数据源(一个控制器)知道用户何时承诺进行更改。
如果您想让“删除/退格删除行”,然后自定义NSTextFieldCell发送一个“MyTableRowWasDeleted”通知,您的数据源可以观察该通知,并采取适当的步骤结束编辑并删除“空行”然后重新加载。