从NSTableView获取stringValue

时间:2011-08-28 22:10:46

标签: objective-c cocoa nstableview

我有一个简单的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中获取编辑后的数据,所以我可以重新加载带有更正的数据。

4 个答案:

答案 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。我猜他们应该为您提供所需的信息。

现在,您可以查询模型,即数组,以获取所需的数据。