2010-08-05 149 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

相關問題