【发布时间】:2018-08-06 08:36:45
【问题描述】:
我有一个具有 UITextField 的子视图控制器。我还有一个父视图控制器,我在其中添加了一个子视图控制器。子视图控制器占据了大约一半的父视图控制器。
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 时,我会显示一个键盘,并且我希望每当用户点击文本字段外部时关闭键盘 - 这将在子视图控制器的视图内,或者父视图控制器的视图。
现在我在两个子视图控制器和父视图控制器中设置了一个点击手势识别器来实现这一点。
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)
}
作为一个初学者,我怀疑在我的项目中包含这样的冗余代码并不是一个好习惯,但我想不出任何其他方法来处理这个问题。
还有哪些其他方法可以确保无论用户是在子视图还是父视图中点击,在文本字段外点击都会关闭键盘?
谢谢。
【问题讨论】:
-
我认为如果你只在父视图控制器上添加点击手势并设置 userInteraction 启用它仍然可以在任一视图控制器视图上点击,唯一的问题是你的子视图控制器不应该有手势可以采取行动,这意味着如果孩子无法处理,则将手势传递给父母。我没试过。请让我知道这是否有效。 :-)
标签: ios swift keyboard uitextfield