티스토리 뷰

반응형

iOS 앱에서도 그렇고 우리는 많은 곳에서 return(엔터키) 키를 사용하여 여러 가지 작업을 편리하게 하는 경우가 많다. 예를 들어 로그인을 하려고 할 때 모든 정보를 입력하고 엔터를 누르면 로그인 버튼을 누르지 않고도 로그인이 가능하게 하는 기능이 있다. 이러한 동작을 iOS 앱의 UITextField에서 사용할 수 있게 프로그래밍을 해보자

이러한 기능을 쉽게 구현하기 위해 textFieldShouldReturn이라는 메서드를 사용할 수 있는데 해당 메서드의 정보는 Apple 공식 문서 - textFieldShouldReturn여기서 볼 수 있다.

Declaration

- (BOOL)textFieldShouldReturn:(UITextField *)textField;

이 메서드의 코드가 UITextField.h라는 파일에 선언되어있는데, 이는 objective-c로 구현이 되어있어서 Swift 문법과는 다르게 선언되어있다. 이를 실제 Swift코드에서 사용하려면 UITextFieldDelegate 프로토콜을 채택한 클래스가 필요하다. 해당 클래스에서 textFieldShouldReturn(_ textField:) 메서드를 선언하여 사용하면 된다. 코드로 보면 다음과 같다.

import UIKit

class ViewController: UIViewController , UITextFieldDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        return true
    }

}

이번 글에서는 ID를 입력하는 텍스트 필드와 Password를 입력하는 텍스트 필드를 만들어 ID 텍스트필드에서 return키를 누르면 Password 텍스트 필드를 작성하도록 커서를 옮기고 Password 텍스트 필드에서 return키를 누르면 로그인 버튼이 눌러지게 해보려고 한다.

먼저 ID 텍스트필드에서 return키를 누르면 Password 텍스트 필드로 커서를 옮기는 것부터 구현해보자.


특정 텍스트필드에 커서를 옮기는 것은 becomeFirstResponder() 메서드를 사용하면 된다.
이 메서드는 현재 이 메서드를 호출한 객체에게 커서를 옮겨주는 메서드인데, 현재 커서가 있는 객체에게 현재 이 메서드를 호출한 객체에 커서를 옮기라고 요청을 주게 된다. 요청을 줬다면 UIKit은 이 메서드를 호출한 객체의 canBecomeFirstResponder 메서드를 호출하여 커서를 옮길 수 있는지 확인한다. 이때 canBecomeFirstResponder에서 true가 반환되어야 커서를 옮길 수 있다.

 

이러한 방법으로 커서가 옮겨지게 되는데 이를 코드로 구현해보자.

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        if textField == self.idTextField {
            self.passwordTextField.becomeFirstResponder()
        } 
        return true
    }

textFieldShouldReturn의 매개변수는 미 메서드를 호출한 텍스트 필드가 된다. 즉 위의 코드는 메서드를 호출한 텍스트 필드가 ID 텍스트 필드라면 password 텍스트 필드로 커서를 옮기라는 코드가 된다.

 

이젠 password 텍스트 필드에서 return키를 눌렀을 때 로그인이 되도록 구현해보자.

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    if textField == self.idTextField {
        self.passwordTextField.becomeFirstResponder()
    } else if textField == self.passwordTextField {
        self.loginButtonPress(self.loginButton)
    }
    return true
}

@IBAction func loginButtonPress(_ sender: UIButton) {
    guard let loginComplete = self.storyboard?.instantiateViewController(withIdentifier: "LoginComplete") else {
        return }
    loginComplete.modalPresentationStyle = .fullScreen
    self.present(loginComplete, animated: true)
}

버튼을 눌렀을 때 로그인을 할 수 있도록 액션을 하나 추가해주었다. password 텍스트필드에서 return키를 누르게 되면 이 액션을 호출하도록 textFieldShouldReturn에 구현하면 원하는 것이 모두 완성되게 된다. 실제 실행 화면은 아래와 같다.

 

이와 같이 UItextField 객체에서 return키를 눌렀을 때의 이벤트를 설정하는 방법에 대해 간단히 알아봤다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함