Ios 如何在使用点击关闭键盘时忽略所有UIControl点击

Ios 如何在使用点击关闭键盘时忽略所有UIControl点击,ios,swift,uibutton,uikeyboard,Ios,Swift,Uibutton,Uikeyboard,这个问题源于我先前的问题 所以,当用户有键盘时,我希望用户能够点击键盘或UITextView之外的任何位置以关闭键盘。这是可行的…但我也希望“第一次”轻触关闭键盘,不会导致任何其他动作 i、 e.ui键盘存在…用户点击任何地方关闭,碰巧点击了ui按钮ui键盘关闭,且未发送ui按钮的操作 我试着找个地方 @IBAction func blahblah(sender: UIButton){ if keyboardShow == false {//UIButtons action here

这个问题源于我先前的问题

所以,当用户有键盘时,我希望用户能够点击键盘或UITextView之外的任何位置以关闭键盘。这是可行的…但我也希望“第一次”轻触关闭键盘,不会导致任何其他动作

i、 e.
ui键盘
存在…用户点击任何地方关闭,碰巧点击了
ui按钮
ui键盘
关闭,且未发送
ui按钮
的操作


我试着找个地方

@IBAction func blahblah(sender: UIButton){
    if keyboardShow == false {//UIButtons action here
    }
}
但是,通过一些
println()
测试,它显示在
ui按钮
注册点击之前,键盘已关闭(因此
keyboardShow
设置为false)

但我也希望“第一次”轻敲关闭键盘不会导致任何其他动作

你可以按你现在的方式来做,但这是非常不灵活的,因为你必须单独处理所有其他控件

最简单的方法是在整个“屏幕”上放置一个不可见的视图(即,将其添加到视图控制器的视图中,位于所有视图的前面),但它应该位于文本视图的后面

text view
secret invisible view
all other views (buttons etc.)
通常,您的秘密不可见视图的
userInteractionEnabled
false
,因此点击只会穿透它后面的任何内容,就好像不可见视图根本不存在一样。用户可以点击按钮等

但当你显示键盘时,你也会将你的秘密不可见视图的
userInteractionEnabled
设置为
true
,并给它一个点击手势识别器。因此,当用户在文本视图外轻触时,轻触手势识别器会做出响应,您会关闭键盘

当您关闭键盘时,您可以反转所有操作:移除轻触手势识别器,并将不可见视图的
userInteractionEnabled
转换为
false

我在我的应用程序中一直使用这种技巧

它也可能更复杂:把你的不可见视图放在所有东西前面,并覆盖它的触摸处理(
hitTest:
)。下面是一个视图示例,该视图阻止所有触摸,但触摸会落在位于其后面的一个特定的
passthruView
上:


是的,我想这么做,但我有多个文本编辑控件,除了当前的文本编辑控件之外,将不可见按钮置于所有控件之上会很乏味。不,不会。重新排列视图的分层顺序很容易。你所做的很无聊。好吧,我可能不得不这么做,因为我刚才所做的对UIButton有效,但对UITableView无效,你能举个例子吗。假设我有5个视图。如何将“不可见”按钮置于其他四个按钮的上方,但置于当前按钮的下方?将“不可见”视图置于前面,然后将当前文本视图置于前面。这一点可能更加复杂:您可以将“不可见”视图置于前面并覆盖
hitTest
。毕竟,这就是popover的工作原理(使用其
直通视图
)。
class BlockerView: UIView {
    weak var passthruView : UIView!
    override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? {
        if let pv = self.passthruView {
            let pt = pv.convertPoint(point, fromView: self)
            if pv.pointInside(pt, withEvent: event) {
                return nil // let the touch fall thru
            }
        }
        return super.hitTest(point, withEvent: event)
    }
}