2017-04-27 67 views
1

我正在开发一个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

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

+0

你需要添加手势为此 –

+0

@ Anbu.Karthik可以请你解释一下? –

回答

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) 

} 
+0

'self.navigationBarTap'是指导航项吗? –

+1

@toing_toing - 不需要处理手势的方法名称,如果需要,您可以自定义 –

1

调用此行您的按钮操作的内部前,您所呼叫按钮的菜单:

YourSearchOutlet.resignFirstResponder() 
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 
    } 
+0

这是在行吗? – KKRocks

+0

按照接受的答案将'tap()'更改为'tap(_ recognizer:UIGestureRecognizer)'后,我试过了,它工作。 –

1

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

// NavigationBar.swift 

import UIKit 

class NavigationBar: UINavigationBar { 

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

}