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

Posted

技术标签:

【中文标题】如何在按下导航栏时快速隐藏键盘【英文标题】:How to hide keyboard in swift on press of navigationBar 【发布时间】:2017-04-27 06:38:43 【问题描述】:

我正在开发一个 swift 3 应用程序,每个页面都有一个导航栏。导航栏左侧还有一个按钮。 我需要在触摸屏幕上的任何对象时退出键盘。 我尝试了通常的

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

    

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

self.navigationController?.navigationBar.endEditing(true)

touchesBegan 函数但它不起作用,大概是因为我没有导航控制器,我只是在情节提要中添加了搜索栏。

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

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

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

【问题讨论】:

你需要为此添加手势 @Anbu.Karthik 你能解释一下吗? 【参考方案1】:

例如

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)


【讨论】:

self.navigationBarTap 指的是导航项吗? @toing_toing - 不,它是处理手势的方法名称,如果你需要你可以自定义【参考方案2】:

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

  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 
    

【讨论】:

我根据接受的答案将tap() 更改为tap(_ recognizer: UIGestureRecognizer) 后尝试过,并且成功了。【参考方案3】:

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

//  NavigationBar.swift

import UIKit

class NavigationBar: UINavigationBar 

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


【讨论】:

【参考方案4】:

在您在按钮上调用 MENU 之前,在按钮操作中调用此行:

YourSearchOutlet.resignFirstResponder()

【讨论】:

以上是关于如何在按下导航栏时快速隐藏键盘的主要内容,如果未能解决你的问题,请参考以下文章

从片段导航到另一个片段时隐藏键盘

在 Android 的文字编辑控件 (TEdit) 中, 如何按下 Enter 就隐藏虚拟键盘

jquery mobile在键盘时隐藏固定页脚

添加子视图时iOS奇怪的键盘隐藏行为

使用键盘输入序列显示隐藏/不可见的表格输入

即使使用输入管理器也无法隐藏 Android 软键盘