Переместите фокус в недавно добавленную запись в NSTableView

Шаг 1: $ npm cache clean --force

Шаг 2: удалить node_modules из папки $ rm -rf node_modules или удалить его вручную, зайдя в каталог и справа -нажмите> удалить.

Шаг 3: npm install

Для начала, $ npm start

Это сработало для меня. Надеется, что это работает и для вас.

Тем не менее, если она есть, пожалуйста, проверьте ошибку, отображаемую красным, и действуйте соответствующим образом. Будьте осторожны при использовании rm -rf . Эта ошибка характерна для среды node.js. Удачного кодирования !!

13
задан hekevintran 10 May 2009 в 08:27
поделиться

1 ответ

Хорошо, прежде всего, если у вас его еще нет, вам нужно создать класс контроллера для вашего приложения. Добавьте выход для NSArrayController , в котором хранятся ваши объекты, и выход для NSTableView , который отображает ваши объекты, в интерфейсе вашего класса контроллера.

IBOutlet NSArrayController *arrayController;
IBOutlet NSTableView *tableView;

Подключите эти выходы. в NSArrayController и NSTableView в IB. Затем вам нужно создать метод IBAction , который вызывается при нажатии кнопки «Добавить»; назовите его addButtonPressed: или что-то подобное, объявив его в интерфейсе класса контроллера:

- (IBAction)addButtonPressed:(id)sender;

, а также сделав его целью вашей кнопки «Добавить» в IB.

Теперь вам нужно реализовать это действие в вашем классе контроллера ' s реализация; этот код предполагает, что объекты, которые вы добавили в контроллер массива, имеют размер 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];
}

Это будет затем вызываться, когда вы нажимаете кнопку «Добавить» и ячейку в первой столбец новой строки начнет редактироваться.

18
ответ дан 1 December 2019 в 23:15
поделиться