如何编辑NSTableView中的行以允许删除该行中的数据并替换为新数据?

时间:2010-05-05 01:06:28

标签: cocoa nstableview

我正在构建一个待办事项列表应用程序,我希望能够编辑表中的条目并用新条目替换它们。我接近能够做我想做但不退出的事情。到目前为止,这是我的代码:

/*
 IBOutlet NSTextField *textField;
 IBOutlet NSTabView *tableView;
 IBOutlet NSButton *button;
 NSMutableArray *myArray;
 */

#import "AppController.h"


@implementation AppController


-(IBAction)addNewItem:(id)sender
{

    [myArray addObject:[textField stringValue]];
    [tableView reloadData];     
}

- (int)numberOfRowsInTableView:(NSTableView *)aTableView
{
    return [myArray count];
}

- (id)tableView:(NSTableView *)aTableView
objectValueForTableColumn:(NSTableColumn *)aTableColumn
            row:(int)rowIndex
{

    return [myArray objectAtIndex:rowIndex];
}

- (id)init
{
    [super init];
    myArray = [[NSMutableArray alloc] init];
    return self;
}
-(IBAction)removeItem:(id)sender
{

    NSLog(@"This is the index of the selected row: %d",[tableView selectedRow]);
    NSLog(@"the clicked row is %d",[tableView clickedRow]);
    [myArray replaceObjectAtIndex:[tableView selectedRow] withObject:[textField stringValue]];
    [myArray addObject:[textField stringValue]];
    //[tableView reloadData];
}

@end

2 个答案:

答案 0 :(得分:1)

目前还不清楚你遇到了什么问题,所以这里有一种更好的方式来实现编辑:

为什么不只是have your data source respond to tableView:setObjectValue:forTableColumn:row: messages消息?然后,用户可以通过双击它们来编辑表视图中的值;不需要单独的文本字段。

如果您只想编辑某些列而不是其他列,还有a delegate method you can implement

答案 1 :(得分:0)

彼得的答案是正确的,但万一有人会寻找完整的编辑行方法:

- (void)tableView:(NSTableView *)tableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
   YourClassWhichHoldsRowRecord *abc = [yourMutableArray objectAtIndex:row];
   [abc setValue:object forKey: [tableColumn identifier]];
}