2010-08-05 3 views
2

Я строю приложение To-Do-List, который использует следующие объекты:Как заменить строку на строку неизвестной длины?

  1. NSTexField для ввода данных
  2. NSTableView для отображения данных (только строковые объекты)
  3. NSButton, что при нажатии будет добавьте содержимое NSTextField в NSTableView для отображения.

Что я хочу сделать, это заменить любую строку в любой строке в NSTableView другой строкой. Например, можно сказать, что пользователь вводит следующее.

  1. мыть машину
  2. купить Starcraft 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 «в строке», но я не мог понять, как это сделать. Теперь это работает, выбирая строку, которую вы хотите отредактировать, а затем поместив новую строку в 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

Так что мне нужно добавить еще одну таблицу реализации: setObjectValue: forTableColumn: строка в дополнение к той, которая у меня уже есть? – lampShade

+0

Моя ошибка, метод, о котором вы говорили, отличается. – lampShade

Смежные вопросы