2013-05-02 67 views
1

我想要一个带有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不准确。 关于如何实现这一点的任何想法? 谢谢!

回答

0

由于表格列的数据单元被重复用于每一行(设置它的值并在绘图,泡沫,冲洗,重复时将其“设置”),这是放置这种类型代码的奇怪之处。 “stringValue不准确”的观察是一个很大的线索 - 它将被设置为单元格上次绘制的任何值,而不能也不应该被确定。

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

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