ios - 在点击任何 UIControl 对象时关闭键盘

标签 ios swift uikeyboard

我有多个键盘触发元素...UITextFieldUITextViewUISearchBar

我想在触摸除键盘和当前事件的“文本编辑”元素之外的任何地方时关闭 UIKeyboard

我已经实现了

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
    searchBar.resignFirstResponder()
    name.resignFirstResponder() //UITextField
    notes.resignFirstResponder() //UITextView
    self.view.endEditing(true)
}

如果用户点击“惰性”元素...背景或 userDisabledView...这会起作用,但我的大部分 View 都是由“事件”元素组成的,例如 UITableViewUIButtons ...

有没有办法使这成为可能,无论在何处进行点击。


我知道的唯一方法是使用一个大的不可见按钮,当 UIKeyboard 出现时,它会在 View 上滑动,调用 self.view.endEditing(true) ,然后缩回到屏幕外。

有什么帮助吗?

注意:我通过在 didSelectRowAtIndexPath 中实现 self.view.endEditing(true) 解决了如果 tap 在 UITableView 上的问题,仍然想听听其他方法休息

最佳答案

//currently active "text editing" element.
var firstResponderView : UIView?

var tap: UITapGestureRecognizer?

//cover the currently active "text editing" element.
var smallView:UIView?

//dont't cover the keyboard
var bigView: UIView?

func createView(){
    bigView = UIView(frame: CGRectZero)
    bigView!.userInteractionEnabled=false

    tap = UITapGestureRecognizer(target: self, action: "endEditing")

    smallView = UIView(frame: CGRectZero)
    smallView!.userInteractionEnabled=false
    bigView!.addSubview(smallView!)
    self.view.addSubview(bigView!)
    self.update()
}

func endEditing(){
    self.view.endEditing(true)
    self.update()
}

//call this after any view become first responder or resign
func update() {

    if(firstResponderView?.isFirstResponder()==true)
    {
        bigView!.addGestureRecognizer(tap!)
        bigView!.userInteractionEnabled = true
        smallView!.frame = firstResponderView!.frame
    }
    else{
        bigView!.removeGestureRecognizer(tap!)
        bigView!.userInteractionEnabled = false
        smallView!.frame=CGRectZero
    }
}

关于ios - 在点击任何 UIControl 对象时关闭键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30388641/

相关文章:

ios - 当键盘出现在我的应用程序中时,按钮部分向上移动(只有按钮的文本移动)

swift - textView 和键盘之间的空间

ios - -[UIViewController_keyboard] : unrecognized selector sent to instance 0x7b731ac0

ios - xcode无法识别我的设备

ios - 在 NSCache 中存储结构的任何方式

ios - uitableview 在像 Yahoo Mail App 这样的标题下淡出单元格

swift - 更改为等宽数字字体后,Cocoa NSTextField 文本在 View 中被截断

ios - 点击推送通知执行功能

iOS-无法获取预期的 json 结果

ios - 从 UIScrollView Swift 禁用水平滚动