У меня сейчас небольшая проблема. Я хочу выполнить метод, когда клавиша Enter нажата в NSTextField. Пользователь должен иметь возможность вводить свои данные, и метод расчета должен быть выполнен, как только он нажимает клавишу ввода.
Выполнить действие, когда клавиша Enter нажата в NSTextField?
Ответ 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 на кнопку, как показано ниже на скриншоте
- Теперь он предоставит вам некоторую опцию, как показано на снимке экрана ниже, вам нужно выбрать выполнить щелчок
- Теперь это должно выглядеть так.
Примечание. Событие будет поднято, как только вы нажмете клавишу 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
будет вызываться.