Как заменить строку на строку неизвестной длины? - PullRequest
2 голосов
/ 05 августа 2010

Я создаю приложение 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;

}

1 Ответ

0 голосов
/ 05 августа 2010

Во-первых, для -tableView:shouldEditTableColumn:row: по умолчанию установлено значение YES, поэтому не требуется для его реализации, хотя впоследствии вы можете ограничить редактирование некоторых строк / столбцов, поэтому можно оставь это там.

Помимо того, что вы сделали, вам не хватает реализации -tableView:setObjectValue:forTableColumn:row:. Если вы реализуете это и заменяете элемент в вашем массиве на значение объекта, которое вы дали, все должно быть хорошо. Вам даже не нужно будет перезагружать данные.

Редактировать: То, что я описал, позволяет людям редактировать вещи на месте в табличном представлении. Ваша кнопка нужна только для добавления новых предметов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...