NSTableView и событие возврата (удалить строку) - fieldeditor / firstresponder? - PullRequest
7 голосов
/ 09 февраля 2011

Можно ли заставить мой NSTableView принимать deleteteevnt (backspace или четный cmd + backspace)?У меня есть NSMenu, где у меня есть пункт меню delete, связанный с моим первым объектом респондента в nib.

Любые указатели?

Ответы [ 4 ]

8 голосов
/ 13 февраля 2011

Один подход, который легко реализовать:

  1. добавьте кнопки +/- к вашему интерфейсу в IB и подключите их к удаленной записи IBAction
  2. с кнопкой удаления (-), выбранной в IB, перейдите к Инспектору атрибутов> Кнопка> Эквивалент ключа
  3. щелкните в окошке, чтобы начать запись нажатия клавиш, затем нажмите клавишу Delete / Backspace

Когда вы строите свой проект, учитывая, что вы реализуете метод deleteRecord, нажатие клавиши Backspace удалит записи из вашего табличного представления

6 голосов
/ 28 февраля 2013

Правильный способ реализации этой функции - использование привязок клавиш:

  1. Выберите элемент меню удаления в IB и установите его ключ, например, как клавишу возврата.
  2. Соедините действие пунктов меню с методом, который вы написали для обработки задачи.Этот метод будет найден для вас автоматически в цепочке респондента, когда вы подключите его через первого респондента.
  3. Реализуйте функцию удаления.

В зависимости от того, какое приложение вы пишетеЕсть методы делегирования проверки.Таким образом, вы можете установить состояние пунктов меню.Для приложений на основе документов эта проверка происходит через - (BOOL)validateUserInterfaceItem:(id)anItem.

5 голосов
/ 29 июня 2017

Это современное решение, использующее NSViewController и First Responder.

. Пункт меню Delete в меню Edit подключен к селектору delete: First Responder.Если пункт меню Delete отсутствует, создайте его и подключите его к delete: первого ответчика (красный куб).

  • Назначьте ключ, эквивалентный пункту меню Delete ( или ⌘⌫ )
  • В контроллере представления реализуйте метод IBAction

    Swift: @IBAction func delete(_ sender: AnyObject)

    Objective-C: -(IBAction)delete:(id)sender

    и вставьте логику для удаления строк (ей) табличного представления.

Подкласс не требуется.

2 голосов
/ 29 февраля 2012

Вы можете создать подкласс NSTableView, переопределяя keyDown примерно так:

- (void)keyDown:(NSEvent *)theEvent
{

    unichar key = [[theEvent charactersIgnoringModifiers] characterAtIndex:0];
    if(key == NSDeleteCharacter) 
    {

        [self deleteItem];
        return;
    }

    [super keyDown:theEvent];

}

Затем убедитесь, что любой NSTableView, для которого вы хотите использовать функцию удаления, использует ваш подкласс в Интерфейсном Разработчике вместо обычного NSTableView.

Вы можете реализовать метод - (void)deleteItem, например, так:

- (void)deleteItem
{
    if ([self numberOfSelectedRows] == 0) return;

    NSUInteger index = [self selectedRow];

    [documentController deleteItemWithIndex:index];

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