Хорошо, во-первых, если у вас его еще нет, вам нужно создать класс контроллера для вашего приложения. Добавьте выход для NSArrayController
, в котором хранятся ваши объекты, и выход для NSTableView
, который отображает ваши объекты, в интерфейсе класса вашего контроллера.
IBOutlet NSArrayController *arrayController;
IBOutlet NSTableView *tableView;
Подключите эти выходы к NSArrayController
и NSTableView
в IB. Затем вам нужно создать метод IBAction
, который вызывается при нажатии кнопки «Добавить»; назовите его addButtonPressed:
или что-то подобное, объявив его в интерфейсе класса вашего контроллера:
- (IBAction)addButtonPressed:(id)sender;
, а также сделать его целью вашей кнопки «Добавить» в IB.
Теперь вам нужно реализовать это действие в реализации вашего класса контроллера; этот код предполагает, что объекты, которые вы добавили в контроллер массива, NSString
s; в противном случае замените тип переменной new
на любой тип объекта, который вы добавляете.
//Code is an adaptation of an excerpt from "Cocoa Programming for
//Mac OS X" by Aaron Hillegass
- (IBAction)addButtonPressed:(id)sender
{
//Try to end any editing that is taking place in the table view
NSWindow *w = [tableView window];
BOOL endEdit = [w makeFirstResponder:w];
if(!endEdit)
return;
//Create a new object to add to your NSTableView; replace NSString with
//whatever type the objects in your array controller are
NSString *new = [arrayController newObject];
//Add the object to your array controller
[arrayController addObject:new];
[new release];
//Rearrange the objects if there is a sort on any of the columns
[arrayController rearrangeObjects];
//Retrieve an array of the objects in your array controller and calculate
//which row your new object is in
NSArray *array = [arrayController arrangedObjects];
NSUInteger row = [array indexOfObjectIdenticalTo:new];
//Begin editing of the cell containing the new object
[tableView editColumn:0 row:row withEvent:nil select:YES];
}
Это будет вызвано при нажатии кнопки «Добавить», и ячейка в первом столбце новой строки начнет редактироваться.