我正在构建一个使用以下对象的待办事项列表:
我想要做的是用另一个字符串替换NSTableView中任何行中的任何给定字符串。 例如,假设用户输入以下内容。
然后在第三行想要改变它 - 建立一个新的电脑。我怎样才能做到这一点?以下是我到目前为止的情况:
#import "AppController.h"
@implementation AppController
-(id)init
{
[super init];
[tableView setDataSource:self];
[tableView setDelegate:self];
array = [[NSMutableArray alloc ] init];
//NSLog(@"this is my delegate %@",[tableView delegate]);
return self;
}
-(IBAction)addItem:(id)sender
{
inputString = [textField stringValue];
[array addObject:inputString];
[tableView reloadData];
return;
}
- (int)numberOfRowsInTableView:(NSTableView *)aTableView
{
return [array count];
}
- (id) tableView:(NSTableView *)aTableView
objectValueForTableColumn:(NSTableColumn *)aTableColumn
row:(int)rowIndex
{
//NSLog(@"this is the object %@",[array objectAtIndex:rowIndex]);
return [array objectAtIndex:rowIndex];
}
-(IBAction) replaceItem:(id)sender
{
NSLog(@"The selected row %d",[tableView selectedRow]);
NSLog(@"The objectAtIndex is: %@",[array objectAtIndex:[tableView selectedRow]]);
[array replaceObjectAtIndex:[tableView selectedRow ] withObject: @"Micheal jordan"];
[tableView reloadData];
return;
}
- (BOOL)tableView:(NSTableView *)aTableView shouldEditTableColumn:(NSTableColumn *)
aTableColumn row:(NSInteger)rowIndex
{
return YES;
}
@end
附录: 我按照建议添加了一个新方法。它现在“有效”但不是我喜欢的方式。我想编辑NSTableView中的条目“在线”但我无法弄清楚如何操作。现在通过选择要编辑的行然后将新字符串放入NSTextField到NSTableView中来实现。
#import "AppController.h"
@implementation AppController
-(id)init
{
[super init];
[tableView setDataSource:self];
[tableView setDelegate:self];
array = [[NSMutableArray alloc ] init];
//NSLog(@"this is my delegate %@",[tableView delegate]);
return self;
}
-(IBAction)addItem:(id)sender
{
inputString = [textField stringValue];
[array addObject:inputString];
[tableView reloadData];
return;
}
- (int)numberOfRowsInTableView:(NSTableView *)aTableView
{
return [array count];
}
- (id) tableView:(NSTableView *)aTableView
objectValueForTableColumn:(NSTableColumn *)aTableColumn
row:(int)rowIndex
{
//NSLog(@"this is the object %@",[array objectAtIndex:rowIndex]);
return [array objectAtIndex:rowIndex];
//return [array replaceObjectAtIndex:[tableView selectedRow ] withObject: @"Micheal jordan"];
}
- (void)tableView:(NSTableView *)aTableView
setObjectValue:(id)anObject
forTableColumn:(NSTableColumn *)aTableColumn
row:(NSInteger)rowIndex
{
[array replaceObjectAtIndex:[tableView selectedRow] withObject:[textField stringValue]];
return;
}
- (BOOL)tableView:(NSTableView *)aTableView shouldEditTableColumn:(NSTableColumn *)
aTableColumn row:(NSInteger)rowIndex
{
return YES;
}
答案 0 :(得分:0)
首先,-tableView:shouldEditTableColumn:row:
的默认设置为YES
,因此您不需要 来实现它,尽管您稍后可能会选择限制某些行/列的编辑,所以把它留在那里很好。
除了你所做的,你错过了-tableView:setObjectValue:forTableColumn:row:
的实现。如果你实现它并用你给出的对象值替换你的数组中的项目,一切都应该没问题。您甚至不需要重新加载数据。
编辑:我所描述的内容允许用户在表格视图中编辑相应的内容。然后,只需添加新项目即可显示您的按钮。