programing

리턴 키를 누를 때 키보드를 빠르게 숨기는 방법

muds 2023. 4. 16. 15:54
반응형

리턴 키를 누를 때 키보드를 빠르게 숨기는 방법

사용하고 있다UITextfied문자화된 키보드를 클릭할 때는 표시되지만 키를 눌렀을 때는 키보드가 사라지지 않습니다.다음 코드를 사용했습니다.

func textFieldShouldReturn(textField: UITextField!) -> Bool // called when 'return' key pressed. return NO to ignore.
{
    return true;
}

메서드 resignfirstresponder가 작동하지 않습니다.

다음 기능을 사용하여 앱에서 키보드를 끌 수 있습니다.

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    self.view.endEditing(true)
    return false
}

다음은 다음 사항을 보다 잘 설명하기 위한 완전한 예입니다.

//
//  ViewController.swift
//
//

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet var myTextField : UITextField

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        self.myTextField.delegate = self
    }

    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        self.view.endEditing(true)
        return false
    }
}

코드 소스: http://www.snip2code.com/Snippet/85930/swift-delegate-sample

return true이 중 일부는 텍스트 필드에 반환이 허용되는지 여부만 알려줍니다.
텍스트 필드에 키보드(또는 최초 응답자)를 해제하도록 수동으로 지시해야 합니다.이 작업은 다음과 같이 수행됩니다.resignFirstResponder()다음과 같은 경우:

// Called on 'Return' pressed. Return false to ignore.

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

대리인이 필요 없음

"Primary Action Triggered"에 대한 액션 아웃렛을 UITextField에서 만들고 전달된 sender 파라미터에 대해 first responder를 재서명할 수 있습니다.

액션 아웃렛 만들기

@IBAction func done(_ sender: UITextField) {
    sender.resignFirstResponder()
}

아주 심플해요.

Scott Smith의 60초짜리 비디오 덕분에 이 일에 대해 힌트를 얻을 수 있었습니다.

  • 더하다UITextFieldDelegate클래스 선언:

    class ViewController: UIViewController, UITextFieldDelegate
    
  • 접속하다textfield프로그래밍 방식으로 작성하거나

    @IBOutlet weak var userText: UITextField!
    
  • 뷰의 텍스트 필드 위임자가 로드한 대로 뷰 컨트롤러를 설정합니다.

    override func viewDidLoad() {
    super.viewDidLoad()
    self.userText.delegate = self
    }
    
  • 다음 기능을 추가합니다.

    func textFieldShouldReturn(userText: UITextField!) -> Bool {
        userText.resignFirstResponder()
        return true;
    }
    

    텍스트 필드 밖에서 터치하거나 리턴 키를 누르면 키보드가 꺼집니다.

모든 UIViewController에 동일한 기능을 추가하는 것은 싫습니다.UIViewController를 확장하여 UITextFieldDelegate를 지원함으로써 기본 동작인 "return pressed"를 제공할 수 있습니다.

extension UIViewController: UITextFieldDelegate{
    public func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true;
    }
}

새로운 UIViewController와 UITextField를 작성할 때는 UIViewController에 1개의 라인 코드를 작성하기만 하면 됩니다.

override func viewDidLoad() {
    super.viewDidLoad()
    textField.delegate = self
}

Main.storyboard에서 대리인을 후크하여 이 한 줄 코드를 생략할 수도 있습니다. ("ctrl"을 사용하여 UITextField에서 UIViewController로 드래그)

심플한 Swift 3 솔루션:텍스트 필드가 있는 뷰 컨트롤러에 다음 기능을 추가합니다.

@IBAction func textField(_ sender: AnyObject) {
    self.view.endEditing(true);
}

그런 다음 보조 편집기를 열고 Main.storyboard가 보기 한쪽에 있고 원하는 보기 controller.swift 파일이 다른 쪽에 있는지 확인합니다.텍스트 필드를 클릭한 다음 우측 유틸리티 패널 '연결 검사기 표시' 탭에서 선택하십시오.빠른 파일의 '종료 시 종료'에서 위 기능으로 드래그하십시오.해당 씬(scene)의 다른 텍스트 필드에 대해 반복하고 동일한 기능에 연결합니다.

@RSC

6.는 Xcode 6.2(6C86e)에 .override func viewDidLoad()

 self.input.delegate = self;

네 글을 찾을 때까지 몇 시간 동안 리턴 키로 작동하려고 했어, RSC감사해요!

또, 화면의 다른 장소를 터치했을 때에 키보드를 숨기려면 , 다음의 순서에 따릅니다.

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
        self.view.endEditing(true);
    }

자동 키보드 해제를 받으려면 커스텀 텍스트 필드의 클래스 중 하나의 메서드에 다음 코드를 입력합니다.

textField.addTarget(nil, action:"firstResponderAction:", forControlEvents:.EditingDidEndOnExit)

아웃렛의 이름을 대신하다textField.

스토리보드를 주로 사용하여 여러 텍스트 필드를 쉽게 만들 수 있는 또 다른 방법은 다음과 같습니다.

@IBAction func resignKeyboard(sender: AnyObject) {
    sender.resignFirstResponder()
}

를 에 합니다.Did End On Exit각 분야의 이벤트

다음은 평종류의 코멘트에 대한 Swift 3.0 업데이트입니다.

textField.addTarget(nil, action:Selector(("firstResponderAction:")), for:.editingDidEndOnExit)

RSC에서 클래스를 시작할 것을 제안합니다.

import Foundation
import UIKit

// Don't forget the delegate!
class ViewController: UIViewController, UITextFieldDelegate {

required init(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

@IBOutlet var myTextField : UITextField?

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    self.myTextField.delegate = self;
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func textFieldShouldReturn(textField: UITextField!) -> Bool {
    self.view.endEditing(true);
    return false;
}

}

사용자가 텍스트 키보드의 [Done]버튼을 탭하면 [Did End On Exit]이벤트가 생성됩니다.이 때 텍스트필드에 제어를 포기하도록 지시하여 키보드가 사라지도록 해야 합니다.그러기 위해서는 컨트롤러 클래스에 액션메서드를 추가해야 합니다.ViewController.swift를 선택하여 다음 작업 방법을 추가합니다.

@IBAction func textFieldDoneEditing(sender: UITextField) {
sender.resignFirstResponder()}

프로젝트 탐색기에서 Main.storyboard를 선택하고 연결 검사기를 불러옵니다.종료 시 종료 옆의 원에서 스토리보드의 노란색 뷰 컨트롤러 아이콘으로 끌어서 놓습니다.방금 추가한 단일 작업의 이름을 포함하는 작은 팝업 메뉴가 나타납니다.textFieldDoneEditing 액션을 클릭하여 선택합니다.

스위프트 3

아래 코드를 VC에 추가해 주세요.

//hide keyboard when user tapps on return key on the keyboard
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    self.view.endEditing(true);
    return false;
}

효과가 있다

override func viewDidLoad() {
    super.viewDidLoad()

    let tap = UITapGestureRecognizer(target: self, action: #selector(handleScreenTap(sender:)))
    self.view.addGestureRecognizer(tap)}

그러면 이 기능을 사용합니다.

func handleScreenTap(sender: UITapGestureRecognizer) {
    self.view.endEditing(true)
}

재빠르다

from from from의 옵션 UITextFieldDelegate.

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    textField.endEditing(false)
}

false그 분야에서 사임을 요청할 수 있다는 것을 의미합니다. true– 제 – – – 。

텍스트 필드 관련 코드를 쓰는 뷰 컨트롤러에 textField 대리인이 설정되어 있는지 확인합니다.

self.textField.delegate = self

이것을 어디에 두어도 되지만, UIButton에는 넣을 수 없습니다.

 func TextFieldEndEditing(text fiend name: UITextField!) -> Bool
{
    return (false)
}

이 코드를 버튼에 입력할 수 있습니다(예를 들어).

self.view.endEditing(true)

이것은 나에게 효과가 있었다.

사용 중인 뷰 컨트롤러:

//suppose you are using the textfield label as this

@IBOutlet weak var emailLabel: UITextField!
@IBOutlet weak var passwordLabel: UITextField!

//then your viewdidload should have the code like this
override func viewDidLoad() {
        super.viewDidLoad()

        self.emailLabel.delegate = self
        self.passwordLabel.delegate = self

    }

//then you should implement the func named textFieldShouldReturn
 func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true
    }

// -- then, further if you want to close the keyboard when pressed somewhere else on the screen you can implement the following method too:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.view.endEditing(true);
    }

이 함수를 호출하려면 UITExtended를 뷰 컨트롤러와 연결해야 합니다.

올인원 키보드 숨기기 및 키보드 열기 화면 이동: Swift 5

override func viewDidLoad() {
    super.viewDidLoad()
    let tap = UITapGestureRecognizer(target: self, action: #selector(taped))
    view.addGestureRecognizer(tap)
    NotificationCenter.default.addObserver(self, selector: #selector(KeyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(KeyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)
}


   override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(true)
    NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillShowNotification, object: nil)
    NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification, object: nil)
}
 @objc func taped(){
    
    self.view.endEditing(true)
    
}

@objc func KeyboardWillShow(sender: NSNotification){
    
    let keyboardSize : CGSize = ((sender.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue.size)!
    if self.view.frame.origin.y == 0{
        self.view.frame.origin.y -= keyboardSize.height
    }
    
    
}

@objc func KeyboardWillHide(sender : NSNotification){
    
    let keyboardSize : CGSize = ((sender.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.size)!
    if self.view.frame.origin.y != 0{
        self.view.frame.origin.y += keyboardSize.height
    }
    
}


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

언급URL : https://stackoverflow.com/questions/24180954/how-to-hide-keyboard-in-swift-on-pressing-return-key

반응형