gpt4 book ai didi

ios - 使用水龙头关闭 UIKeyboard 时如何忽略所有 UIControl 水龙头

转载 作者:行者123 更新时间:2023-11-28 05:27:48 26 4
gpt4 key购买 nike

这个问题源于我之前的问题dismiss keyboard on tapping on any UIControl object .

因此,当用户有键盘时,我希望用户能够点击键盘或 UITextView 之外的任何地方来关闭键盘。这行得通......但我也希望关闭键盘的“第一次”点击不会导致任何其他操作。

UIKeyboard 存在...用户点击任意位置关闭并碰巧点击 UIButtonUIKeyboard 已关闭,UIButton 的操作未发送。


我试着放置

@IBAction func blahblah(sender: UIButton){
if keyboardShow == false {//UIButtons action here
}
}

但是对于一些 println() 测试,它显示键盘在 UIButton 注册之前关闭(因此 keyboardShow 设置为 false)水龙头。

最佳答案

But I also want that "first" tap that closes the keyboard to not cause any other actions.

您可以按您现在的方式进行操作,但这样做非常不灵活,因为您必须分别单独处理所有其他控件。

最简单的方法就是在整个“屏幕”之上放置一个不可见的 View (即将它添加到 View Controller 的 View 中,在所有 View 的前面)——除了它应该在文本后面查看。

text view
secret invisible view
all other views (buttons etc.)

通常,您的 secret 不可见 View 的 userInteractionEnabledfalse,因此点击只会落到它后面的任何地方,就好像不可见 View 根本不存在一样。用户可以点击按钮等。

但是,当您显示键盘时,您还将 secret 不可见 View 的 userInteractionEnabled 设置为 true 并为其提供点击手势识别器。因此,当用户在 TextView 之外点击时,点击手势识别器会做出响应,并且您会关闭键盘。

当您关闭键盘时,所有这一切都将逆转:移除点击手势识别器并将不可见 View 的 userInteractionEnabled 设置为 false

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

也可以更复杂:将干扰的不可见 View 放在所有 前面并覆盖其触摸处理 (hitTest:)。下面是一个阻止所有触摸的 View 示例,除了会落在位于它后面的一个特定 passthruView 上的触摸:

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)
}
}

关于ios - 使用水龙头关闭 UIKeyboard 时如何忽略所有 UIControl 水龙头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30419638/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com