[英]How to hide keyboard in swift on press of navigationBar
我正在開發一個swift 3應用程序,該應用程序在每個頁面中都有一個導航欄。 導航欄的左側也有一個按鈕。 我需要在觸摸屏幕上的任何對象時辭職鍵盤。 我嘗試了平常的
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true)
}
但它適用於視圖的所有其他部分(導航欄除外)。 我嘗試添加以下代碼:
self.navigationController?.navigationBar.endEditing(true)
到touchesBegan
函數,但是沒有用,大概是因為我沒有導航控制器,我只是在情節提要中添加了搜索欄。
如何在導航欄(包括導航欄中的按鈕)上輕按以使鍵盤退出登錄?
這對我的應用程序很重要,因為如下所示,這是用戶可在不更改視圖的情況下輕按的最大空間。
我需要在黃色包圍的區域中進行辭職,包括箭頭所示的按鈕。
例如
override func viewDidLoad() {
super.viewDidLoad()
let hideKeyboard = UITapGestureRecognizer(target: self, action: #selector(self.navigationBarTap))
hideKeyboard.numberOfTapsRequired = 1
navigationController?.navigationBar.addGestureRecognizer(hideKeyboard)
}
並以
func navigationBarTap(_ recognizer: UIGestureRecognizer) {
view.endEditing(true)
// OR USE yourSearchBarName.endEditing(true)
}
在按鈕上調用MENU之前,請在按鈕操作內調用此行:
YourSearchOutlet.resignFirstResponder()
嘗試在導航欄上添加點擊手勢:
override func viewDidLoad() {
super.viewDidLoad()
let navSingleTap = UITapGestureRecognizer.init(target: self, action: #selector(self.tap(_:)))
navSingleTap.numberOfTapsRequired = 1
self.navigationController?.navigationBar.subviews[1].isUserInteractionEnabled = true
self.navigationController?.navigationBar.subviews[1].addGestureRecognizer(navSingleTap)
}
func tap() {
// do your work
}
子類化UINavigationBar並將其設置為情節提要中導航欄的自定義類。
// NavigationBar.swift
import UIKit
class NavigationBar: UINavigationBar {
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.window?.endEditing(true)
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.