如何在按下导航栏时快速隐藏键盘
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()
【讨论】:
以上是关于如何在按下导航栏时快速隐藏键盘的主要内容,如果未能解决你的问题,请参考以下文章