我想要一个带有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不准确。 关于如何实现这一点的任何想法? 谢谢!
答案 0 :(得分:0)
由于表格列的数据单元格被重用于每一行(设置其值并在绘制,泡沫,冲洗,重复时将其“标记”到位),这是放置此类代码的奇怪之处。 “stringValue不准确”观察是一个很大的线索 - 它将被设置为细胞最后用于绘制的任何值,这不能也不应该被确定。
为什么不让数据源管理它?当-tableView:setObjectValue:forTableColumn:row:被调用,检查obj是否为空字符串/ nil / whatever,然后删除该行并重新加载。 “清空此单元格”是用户操作;表视图处理它并让其数据源(控制器)知道用户何时提交更改。
如果你想让“删除/退格删除行”然后自定义NSTextFieldCell以发送一个“MyTableRowWasDeleted”通知,你的数据源可以观察到该通知,并采取适当的步骤来结束编辑并删除“空”行,然后重装。