2010-08-05 139 views
2

我建立一个任务 - 列出应用程序,它使用下列对象:如何用一个未知长度的字符串替换一个字符串?

  1. NSTexField数据录入
  2. NSTableView的显示数据(只是字符串对象)
  3. NSButton,单击时会将NSTextField的内容添加到NSTableView以供显示。

我想要做的是用另一个字符串替换NSTableView中任何行中的任何给定的字符串。例如,让我们说用户输入以下内容。

  1. 洗车
  2. 购买星际争霸II
  3. 升级显卡。

但是,然后在第三行想要改变 - 建立一个新的电脑。我怎样才能做到这一点?以下是我迄今为止:

#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中的条目“in line”,但我无法弄清楚如何去做。现在通过选择你想要编辑的行然后把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

首先,要对-tableView:shouldEditTableColumn:row:默认为YES让你不需要来实现它,但你以后可能会选择限制某些行/列的编辑,所以它的精细离开那里。

除了你已经做了什么,你错过了-tableView:setObjectValue:forTableColumn:row:的实现。如果你实现了这个,并用给定的对象值替换数组中的项目,那么一切都应该没问题。你甚至不需要重新加载数据。

编辑:我所描述的允许人们在表格视图中编辑事物。您的按钮只需要添加新项目。

+0

所以我需要添加另一个实现tableView:setObjectValue:forTableColumn:row除了我已经有的? – lampShade 2010-08-05 16:40:57

+0

我提到的方法不同,我的错误。 – lampShade 2010-08-05 17:16:09

相关问题