簡體   English   中英

如何在按下返回鍵時快速隱藏鍵盤?

[英]How to hide keyboard in swift on pressing return key?

我在單擊文本化鍵盤時使用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
}

Swift 4.2 - 無需委托

您可以從 UITextField 為“觸發的主要操作”創建一個操作出口,並在傳入的發送者參數上退出第一響應者:

創建動作插座

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

超級簡單。

(感謝 Scott Smith 的 60 秒視頻讓我知道這個: https : //youtu.be/v6GrnVQy7iA

  • 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,您可以提供“按下返回”的默認行為。

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

當你創建新的 UIViewController 和 UITextField 時,你所要做的就是在你的 UIViewController 中編寫一行代碼。

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 文件位於另一側。 單擊文本字段,然后從右側實用程序面板中選擇“顯示連接檢查器”選項卡。 控制從 'Did End on Exit' 拖動到 swift 文件中的上述函數。 對該場景中的任何其他文本字段重復此操作並鏈接到相同的功能。

@RSC

對我來說,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事件上的該操作。

我建議從 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()}

在 Project Navigator 中選擇 Main.storyboard 並調出連接檢查器。 從 Did End On Exit 旁邊的圓圈拖動到故事板中的黃色視圖控制器圖標,然后松開。 將出現一個小的彈出菜單,其中包含我們剛剛添加的單個操作的名稱。 單擊 textFieldDoneEditing 操作以選擇它,就是這樣。

這是對 Peacetype 評論的 Swift 3.0 更新:

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

斯威夫特 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)
}

確保您的 textField 委托設置為您正在編寫與文本字段相關的代碼的視圖控制器。

self.textField.delegate = self

迅速

使用UITextFieldDelegate可選函數。

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

false表示該字段可以被要求辭職。 true ——強制辭職。

你可以把它放在任何地方,但不能放在 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);
    }

您應該將 UITextfied 與視圖控制器的委托連接以調用此函數

多合一隱藏鍵盤並在鍵盤上移動視圖打開: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
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM