Подтвердить что ты не робот

Выполнить действие, когда клавиша Enter нажата в NSTextField?

У меня сейчас небольшая проблема. Я хочу выполнить метод, когда клавиша Enter нажата в NSTextField. Пользователь должен иметь возможность вводить свои данные, и метод расчета должен быть выполнен, как только он нажимает клавишу ввода.

4b9b3361

Ответ 1

Вы можете сделать это, установив действие текстового поля. В IB проведите селектор текстового поля к вашему контроллеру или какой-либо объект представляет IBAction, который вы хотите использовать.

Чтобы установить его в код, отправьте сообщение NSTextField a setTarget: и сообщение setAction:. Например, если вы устанавливаете это на свой объект контроллера в коде, а ваш вывод textField называется myTextField:

- (void)someAction:(id)sender
{
  // do something interesting when the user hits <enter> in the text field
}

// ...

[myTextField setTarget:self];
[myTextField setAction:@selector(someAction:)];

Ответ 2

Вы должны сделать только это

Для некоторых клавиш (Enter, Delete, Backspace и т.д.)

self.textfield.delegate = self;

а затем реализовать этот метод

- (BOOL)control:(NSControl *)control textView:(NSTextView *)fieldEditor doCommandBySelector:(SEL)commandSelector
{
    NSLog(@"Selector method is (%@)", NSStringFromSelector( commandSelector ) );
    if (commandSelector == @selector(insertNewline:)) {
        //Do something against ENTER key

    } else if (commandSelector == @selector(deleteForward:)) {
        //Do something against DELETE key

    } else if (commandSelector == @selector(deleteBackward:)) {
        //Do something against BACKSPACE key

    } else if (commandSelector == @selector(insertTab:)) {
        //Do something against TAB key
    }

    // return YES if the action was handled; otherwise NO
} 

Ответ 3

В вашем делегате (NSTextFieldDelegate) добавьте следующее:

-(void)controlTextDidEndEditing:(NSNotification *)notification
{
    // See if it was due to a return
    if ( [[[notification userInfo] objectForKey:@"NSTextMovement"] intValue] == NSReturnTextMovement )
    {
        NSLog(@"Return was pressed!");
    }
}

Ответ 4

NSTextFieldDelegate - control:textView:doCommandBySelector: является вашим другом.

Найдите команду insertNewline:.

Ответ 5

Это очень просто, и вы можете сделать это непосредственно из редактора пользовательского интерфейса

  • Щелкните правой кнопкой мыши на Text Feild, перетащите ссылку Action на кнопку, как показано ниже на скриншоте

введите описание изображения здесь

  1. Теперь он предоставит вам некоторую опцию, как показано на снимке экрана ниже, вам нужно выбрать выполнить щелчок

введите описание изображения здесь

  1. Теперь это должно выглядеть так.

введите описание изображения здесь

Примечание. Событие будет поднято, как только вы нажмете клавишу Tab или Enter. Если вы хотите, чтобы действие было поднято только тогда, когда пользователь нажимает клавишу Enter, вам необходимо выполнить настройку. Перейдите в Attribute inspector и измените свойство Action на Send on Enter only, как показано на снимке экрана ниже

введите описание изображения здесь

Ответ 6

Версия Swift 3 решения @M.ShuaibImran:

Первый подкласс вашего ViewController к: NSTextFieldDelegate

class MainViewController: NSViewController, NSTextFieldDelegate {
  ...
} 

Назначьте делегат textField для ViewController в вашем представленииDidLoad():

self.textField.delegate = self

Включить метод NSTextFieldDelegate, который обрабатывает ответчиков клавиатуры:

func control(_ control: NSControl, textView: NSTextView, doCommandBy commandSelector: Selector) -> Bool {
    if (commandSelector == #selector(NSResponder.insertNewline(_:))) {
        // Do something against ENTER key
        print("enter")
        return true
    } else if (commandSelector == #selector(NSResponder.deleteForward(_:))) {
        // Do something against DELETE key
        return true
    } else if (commandSelector == #selector(NSResponder.deleteBackward(_:))) {
        // Do something against BACKSPACE key
        return true
    } else if (commandSelector == #selector(NSResponder.insertTab(_:))) {
        // Do something against TAB key
        return true
    } else if (commandSelector == #selector(NSResponder.cancelOperation(_:))) {
        // Do something against ESCAPE key
        return true
    }

    // return true if the action was handled; otherwise false
    return false
}

Ответ 7

В интерфейсе Builder - нажмите на свой NSTextField, перейдите в редактор соединений, перетащите его из селектора в объект контроллера - вы должны придумать действия!

Ответ 8

Лучший способ сделать это - связать значение NSTextField с свойством NSString.

Например, определите метод:

(void)setTextFieldString:(NSString *)addressString {}

добавить привязки:

[textField bind:@"value" toObject:self withKeyPath:@"self.textFieldString" options:nil];

Введите текст и нажмите клавишу возврата, setTextFieldString будет вызываться.