UFO ET IT

Swift에서 버튼 누르기와 동일한 작업을 수행하기 위해 리턴 키를 얻으려면 어떻게해야합니까?

ufoet 2020. 12. 2. 22:19
반응형

Swift에서 버튼 누르기와 동일한 작업을 수행하기 위해 리턴 키를 얻으려면 어떻게해야합니까?


소프트웨어 키보드에서 Return 키를 누르거나 UIButton을 탭하여 작업을 수행하는 방법을 알고 싶습니다.

UI 버튼은 이미 IBAction을 수행하도록 설정되어 있습니다.

사용자가 키보드의 Return 키를 눌러 동일한 작업을 수행하도록 허용하려면 어떻게해야합니까?


클래스가 UITextFieldDelegate 프로토콜을 확장하는지 확인하십시오.

SomeViewControllerClass : UIViewController, UITextFieldDelegate

다음과 같은 작업을 수행 할 수 있습니다.

override func viewDidLoad() {
    super.viewDidLoad()

    self.textField.delegate = self
}

func textFieldShouldReturn(textField: UITextField) -> Bool {

    //textField code

    textField.resignFirstResponder()  //if desired
    performAction()
    return true
}

func performAction() {   
    //action events
}

최신 정보

배포 대상이 iOS 9.0 이상인 경우 다음과 같이 텍스트 필드의 "Primary Action Triggered"이벤트를 작업에 연결할 수 있습니다.

연결 기본 작업 트리거 이벤트

실물

뷰 컨트롤러가 UITextFieldDelegate프로토콜을 채택하도록 합니다.

텍스트 필드의 델리게이트를 뷰 컨트롤러로 설정합니다.

textFieldShouldReturn:당신의 행동을 촉구하기 위해 구현 하십시오.


배포 대상이 iOS 9.0 이상인 경우 다음과 같이 텍스트 필드의 "Primary Action Triggered"이벤트를 작업에 연결할 수 있습니다.

제안 된대로 작동하도록 "Primary Action Triggered"를 가져올 수 없습니다. "Editing Did End"를 사용했는데 지금은 작동합니다. Editing Did End 스크린 샷

여기에 이미지 설명 입력


다음은 두 가지가 모두 포함 된 완전한 예입니다.

  1. 버튼 동작을 작성하고 버튼을 반복해서 누를 때 레이블과 텍스트를 지우려면 두 동작을 번갈아 가며

  2. 키를 누를 때 키보드로 복귀하면 작업이 트리거되고 첫 번째 응답자가 사임합니다.

class ViewController: UIViewController, UITextFieldDelegate {
    
    @IBOutlet weak var textField1: UITextField!
    @IBOutlet weak var label1: UILabel!
    
    var buttonHasBeenPressed = false
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        textField1.delegate = self
    }
    
    
    @IBAction func buttonGo(_ sender: Any) {
        performAction()
    }
    
    
    
    
    
    
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        performAction()
        return true
    }
    
   
    func performAction() {
        buttonHasBeenPressed = !buttonHasBeenPressed
        
        if buttonHasBeenPressed == true {
            label1.text = textField1.text
        } else {
            textField1.text = ""
            label1.text = ""
        }
        
    }
    
}


Swift 4.2 :

프로그래밍 방식으로 생성되고 delegate가 필요하지 않은 텍스트 필드에 대한 다른 접근 방식 :

     MyTextField.addTarget(self, action: #selector(MyTextFielAction)
                               , for: UIControl.Event.primaryActionTriggered)

그런 다음 아래와 같이 작업을 수행하십시오.

    func MyTextFielAction(textField: UITextField) {
       //YOUR CODE can perform same action as your UIButton
    }

참고 URL : https://stackoverflow.com/questions/26288124/how-do-i-get-the-return-key-to-perform-the-same-action-as-a-button-press-in-swif

반응형