我有一个简单的NSTableView,我已经加载了来自NSMutableArray的数据。当我在tableView中选择一行(条目)并修改它时,我可以找到行索引,我不能得到的是编辑后的输入字符串,所以我可以修改数组。我可以找到很多关于选择行等的信息,但是没有关于如何获得实际修改的字符串的信息。我一直认为这应该是非常简单的。请帮助。
我的部分代码:
- (IBAction)toDoEdit:(id)sender // Accept the edited data
{
NSString *toDoItem = [[toDoTableCell:toDoTableView dataCellFoTableColumn:0 row:rowToBeEdited] stringValue];
//我收到错误“dataCellForTableColumn”方法无法找到。
[toDoArray replaceObjectAtIndex:rowToBeDeleted withObject:toDoItem];
[toDoTableView reloadData];
[toDoTableView deselectRow:rowToBeDeleted];
}
~~~~~~~~~~~
// This method should return the cell value of the selected row
- toDoTableCell:(NSTableView *)tableView dataCellForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
return toDoTableCell; // No errors here but toDoTableCell is nil.
}
“添加”数据到tableView工作,“删除”数据从tableView起作用,我只是无法从tableView中获取编辑后的数据,所以我可以重新加载带有更正的数据。
答案 0 :(得分:1)
您正在寻找的是NSTableView Delegate方法:
- (NSCell *)tableView:(NSTableView *)tableView dataCellForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
这将返回您指定的行和列中的NSCell。从NSCell中,您应该能够提取所需的值。根据您使用NSCell的方式,您可以调用[cell stringValue]或[cell objectValue]。
答案 1 :(得分:1)
试试这个:
– tableView:setObjectValue:forTableColumn:row:
in - NSTableViewDataSource Protocol Reference
---根据评论编辑---
只要用户尝试编辑表格行,就会调用上面的方法,它还会为用户提供更改后的值作为参数。如果您正在尝试编辑表格中的行,那么它应该符合您的目的。您只需检查作为参数获取的objectValue,并验证它是否正确。如果不正确,您可以修改获得的值并在todoArray中设置它。
简言之:
- (void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
{
// below case is an example, you can add your own
if([anObject isEqualToString:@"Incorrect"])
{
anObject = @"Correct";
}
// Considering todoArray is array of dictionary items containing keys as table-column identifiers
NSMutableDictionary *originalData = [todoArray objectAtIndex:rowIndex];
[originalData setValue:anObject forKey:[aTableColumn identifier]];
[toDoTableView reloadData];
}
要获得正在编辑的值,您可以在设置新值之前在上述方法中使用此代码:
NSString *editedValue = [[todoArray objectAtIndex:rowIndex] valueForKey:[aTableColumn identifier]];
希望这会有所帮助:)
答案 2 :(得分:0)
很简单。阅读Cocoa Bindings和NSArrayController。
答案 3 :(得分:0)
查看NSTableView方法selectedColumn,selectedColumnIndexes,selectedRow和selectedRowIndexes。我猜他们应该为您提供所需的信息。
现在,您可以查询模型,即数组,以获取所需的数据。