如何在按下导航栏时快速隐藏键盘

问题描述 投票:0回答:5

我正在开发一个 swift 3 应用程序,每个页面都有一个导航栏。导航栏左侧还有一个按钮。 我需要在触摸屏幕上的任何物体时放弃键盘。 我尝试用平常的方式

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

    }

但它适用于除导航栏之外的视图的所有其他部分。 我尝试添加以下代码:

self.navigationController?.navigationBar.endEditing(true)

touchesBegan
功能,但它不起作用,大概是因为我没有导航控制器,我只是在故事板中添加了搜索栏。

如何让键盘在点击导航栏(包括导航栏中的按钮)时退出?

这对我的应用程序很重要,因为正如您在下面看到的,它是用户在不更改视图的情况下可以点击的最大空间。

enter image description here

我需要在黄色包围的区域进行辞职工作,包括箭头所示的按钮。

ios swift swift3 uinavigationitem resignfirstresponder
5个回答
3
投票

例如

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)

}

1
投票

尝试在导航栏上添加点击手势:

  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 
    }

1
投票

子类 UINavigationBar 并将其设置为 Storyboard 中导航栏的自定义类。

//  NavigationBar.swift

import UIKit

class NavigationBar: UINavigationBar {

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

}

1
投票

在按钮上调用菜单之前,请在按钮操作内调用此行:

YourSearchOutlet.resignFirstResponder()

0
投票

与 KKRocks 答案类似,但使用扩展名:

import UIKit


extension UINavigationController {
    
    
    func hideKeyBoardOnTap() {
        let hideKeyboard = UITapGestureRecognizer(target: self, action: #selector(navigationBarTap))
        hideKeyboard.numberOfTapsRequired = 1
        self.navigationBar.addGestureRecognizer(hideKeyboard)
    }
    
    
    @objc func navigationBarTap(_ recognizer: UIGestureRecognizer) {
        view.endEditing(true)
    }
    
}

用途:

override func viewDidLoad() {
//...other code
navigationController?.hideKeyBoardOnTap()
}
© www.soinside.com 2019 - 2024. All rights reserved.