Как мне отредактировать строку в NSTableView, чтобы разрешить удаление данных в этой строке и замену новыми данными? - PullRequest
2 голосов
/ 05 мая 2010

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

/*
 IBOutlet NSTextField *textField;
 IBOutlet NSTabView *tableView;
 IBOutlet NSButton *button;
 NSMutableArray *myArray;
 */

#import "AppController.h"


@implementation AppController


-(IBAction)addNewItem:(id)sender
{

    [myArray addObject:[textField stringValue]];
    [tableView reloadData];     
}

- (int)numberOfRowsInTableView:(NSTableView *)aTableView
{
    return [myArray count];
}

- (id)tableView:(NSTableView *)aTableView
objectValueForTableColumn:(NSTableColumn *)aTableColumn
            row:(int)rowIndex
{

    return [myArray objectAtIndex:rowIndex];
}

- (id)init
{
    [super init];
    myArray = [[NSMutableArray alloc] init];
    return self;
}
-(IBAction)removeItem:(id)sender
{

    NSLog(@"This is the index of the selected row: %d",[tableView selectedRow]);
    NSLog(@"the clicked row is %d",[tableView clickedRow]);
    [myArray replaceObjectAtIndex:[tableView selectedRow] withObject:[textField stringValue]];
    [myArray addObject:[textField stringValue]];
    //[tableView reloadData];
}

@end

Ответы [ 2 ]

1 голос
/ 08 мая 2010

Непонятно, с какой проблемой вы столкнулись, поэтому лучше вместо этого реализовать редактирование:

Почему бы просто ваш источник данных не ответил на tableView:setObjectValue:forTableColumn:row: сообщения сообщения? Затем пользователь может редактировать значения прямо в табличном представлении, дважды щелкнув по ним; нет необходимости в отдельном текстовом поле.

Существует также метод делегата, который вы можете реализовать , если хотите разрешить редактирование только некоторых столбцов, но не других.

0 голосов
/ 02 ноября 2012

Ответ Питера верен, но на всякий случай кто-то ищет полный метод редактирования строки:

- (void)tableView:(NSTableView *)tableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
   YourClassWhichHoldsRowRecord *abc = [yourMutableArray objectAtIndex:row];
   [abc setValue:object forKey: [tableColumn identifier]];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...