[英]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
}
您可以從 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.