Ios 如何在使用点击关闭键盘时忽略所有UIControl点击
这个问题源于我先前的问题 所以,当用户有键盘时,我希望用户能够点击键盘或UITextView之外的任何位置以关闭键盘。这是可行的…但我也希望“第一次”轻触关闭键盘,不会导致任何其他动作 i、 e.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
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)
}
}