gpt4 book ai didi

ios - 点击 subview Controller 或父 View Controller 时处理键盘关闭的替代方法?

转载 作者:行者123 更新时间:2023-11-28 07:53:31 25 4
gpt4 key购买 nike

我有一个带有 UITextField 的 subview Controller 。我还有一个父 View Controller ,我在其中添加了一个 subview Controller 。 subview Controller 约占父 View Controller 的一半。

self.childVC = ChildViewController()
self.childVC.delegate = self

func addChildViewController () {
self.addChildViewController(self.childVC)
self.childVC.view.frame = CGRect(x: x, y: y, width: widthOfContainerView, height: heightOfContainerView)
self.view.addSubview(self.childVC.view)
self.childVC.didMove(toParentViewController: self)
}

当用户点击 UITextField 时,我会显示一个键盘,并且我希望每当用户点击文本字段外部时关闭键盘 - 这将在 subview Controller 的 View 中,或者父 View Controller 的 View 。

现在我正在 subview Controller 和父 View Controller 中冗余地设置轻击手势识别器以实现这一点。

func setupTapGestureRecognizer() {
let tap = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(_:)))
view.addGestureRecognizer(tap)
view.isUserInteractionEnabled = true
}

@objc func handleTap(_ sender: UITapGestureRecognizer) {
view.endEditing(true)
}

作为初学者,我怀疑在我的项目中有这样的冗余代码不是很好的做法,但我想不出任何其他方法来处理这个问题。

还有哪些其他方法可以确保无论用户是在 subview 还是父 View 中点击,在文本字段外点击都会关闭键盘?

谢谢。

最佳答案

5 年过去了,这仍然是我必须处理的 iOS 最烦人的方面之一。不幸的是,我个人还没有看到可以处理所有问题的直接方法,但这是我的 FWIW 方法:

首先,我倾向于使用 catch all,而不是乱用 view.endEditing 或手动退出单个项目的第一响应者:UIApplication.shared.sendAction(Selector(resignFirstResponder), to: nil, from: nil, for: nil).

这很容易处理一般情况,以及第一响应者(在您的示例中为 TextField)可能与被点击的 View 不在同一 View 堆栈中的情况。这也有助于以您喜欢的任何方式将其添加为 extension

除此之外,它实际上是关于最大限度地覆盖您的tapGestures。以下是我使用的一些选项:

  • 正如@IraniyaNaynesh 所提到的,调整 userInteractionEnabled 使点击落到处理所有内容的底层。
  • 创建 UIViewUILabel 等的子类,自动处理点击以调用 resignFirstResponder
  • 在编辑 TextField 时动态添加/删除一组清晰的 View 。 (不理想,但在某些情况下我发现这是最简单的解决方案)。

希望有人(或 Apple)可以为此提出一个更简单的解决方案!

关于ios - 点击 subview Controller 或父 View Controller 时处理键盘关闭的替代方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48996117/

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