NSTableView单元格编辑:在哪里执行编辑后操作?

时间:2013-10-02 10:38:45

标签: macos cocoa nstableview

我通过直接选择单元格(NSTableView)并编辑其中的文本来修改NSTextFieldCell的源数据。

我需要在编辑单元格之前和之后对单元格执行一些操作。 我在编辑之前执行此类操作:

- (BOOL)tableView:(NSTableView *)aTableView shouldEditTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex

但是我可以在哪里进行编辑后的操作?

由于

2 个答案:

答案 0 :(得分:5)

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Protocols/NSTableDataSource_Protocol/index.html#//apple_ref/occ/intfm/NSTableViewDataSource/tableView:setObjectValue:forTableColumn:row

- (void)tableView:(NSTableView *)aTableView
   setObjectValue:(id)anObject
   forTableColumn:(NSTableColumn *)aTableColumn
              row:(NSInteger)rowIndex

引自:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/TableView/PopulatingCellTables/PopulatingCellTables.html

  

要让您的应用编辑基于NSCell的表格视图的内容,您就可以了   实现tableView:setObjectValue:forTableColumn:row:数据源   协议方法。这种方法类似于   tableView:objectValueForTableColumn:row:,提供数据   表视图,而不是请求您返回值   指定的行和列,它为该行提供新值   和细胞

答案 1 :(得分:1)

让谷歌搜索 nstableview编辑更改,您将获得大量详细答案。

简而言之:使用(某些)以下(和类似的)委托方法:

- (void)controlTextDidEndEditing:(NSNotification *)obj
- (void)controlTextDidChange:(NSNotification *)aNotification
- (BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor

并测试它们以显示适合您的应用的内容:

- (void)controlTextDidEndEditing:(NSNotification *)obj
{
    NSDictionary *userInfo = [obj userInfo];
    NSTextView *aView = [userInfo valueForKey:@"NSFieldEditor"];
    NSLog(@"controlTextDidEndEditing %@", [aView string] );
}

- (void)controlTextDidChange:(NSNotification *)aNotification
{
    NSDictionary *userInfo = [aNotification userInfo];
    NSTextView *aView = [userInfo valueForKey:@"NSFieldEditor"];
    NSLog(@"controlTextDidChange >>%@<<", [aView string] );
}

- (BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor
{
    NSLog(@"control: textShouldEndEditing >%@<", [fieldEditor string] );
    return YES;
}

您可以这样做,因为NSTableView的单元格是NSTextFieldCell s;