IT Share you

NSTextField에서 Enter-Key를 눌렀을 때 액션을 실행합니까?

shareyou 2020. 12. 2. 22:16
반응형

NSTextField에서 Enter-Key를 눌렀을 때 액션을 실행합니까?


지금 작은 문제가 있습니다. NSTextField에서 Enter 키를 눌렀을 때 메서드를 실행하고 싶습니다. 사용자는 자신의 데이터를 입력 할 수 있어야하며 엔터 키를 누르는 즉시 계산 방법이 실행되어야합니다.


텍스트 필드의 동작을 설정하여이를 수행 할 수 있습니다. IB에서 텍스트 필드의 선택기를 컨트롤러 또는 사용하려는 IBAction을 나타내는 모든 개체에 연결합니다.

코드에서 설정하려면 NSTextField에 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:)];

이거 만하면 돼

일부 키 (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
} 

대리인 (NSTextFieldDelegate)에서 다음을 추가합니다.

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

@ M.ShuaibImran 솔루션 Swift 3 버전 :

먼저 ViewController를 다음과 같이 하위 클래스로 만듭니다. NSTextFieldDelegate

class MainViewController: NSViewController, NSTextFieldDelegate {
  ...
} 

viewDidLoad ()의 ViewController에 textField 델리게이트를 할당합니다.

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
}

매우 쉽고 UI 편집기에서 직접 할 수 있습니다.

  1. Text Feild를 마우스 오른쪽 버튼으로 클릭하고 아래 스크린 샷과 같이 Action 참조를 버튼으로 드래그합니다.

여기에 이미지 설명 입력

  1. 이제 아래 스크린 샷과 같이 몇 가지 옵션이 제공되며 클릭 수행을 선택해야합니다.

여기에 이미지 설명 입력

  1. 이제 다음과 같이 보일 것입니다.

여기에 이미지 설명 입력

Note: The event will be raised as soon as you press Tab or Enter key. In case you want the action should only be raised when user presses the Enter key then you have to do a setting. Go to the Attribute inspector and change the Action property to Send on Enter only as shown in screen shot below

여기에 이미지 설명 입력


NSTextFieldDelegate's – control:textView:doCommandBySelector: is your friend.

Look for the insertNewline: command.


In Interface Builder - click on your NSTextField, go to the connections editor, drag from selector to your controller object - you're actions should come up!


Best way to do that is to bind the NSTextField value with NSString property.

For Example,define a method:

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

add bindings:

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

Enter any text and hit the return key, setTextFieldString will be called.

참고 URL : https://stackoverflow.com/questions/995758/execute-an-action-when-the-enter-key-is-pressed-in-a-nstextfield

반응형