包含 UITextfield 的子视图未注册点击手势



我有一个带有文本字段的子视图。当我敲击文本字段之外的任何位置时,我希望键盘被忽略,但问题是子视图内的敲击没有被注册,只有子视图外的敲击才会忽略键盘。

我的视图有一个子视图(coverView(:

var coverView: UIView = {
let cover = UIView()
cover.translatesAutoresizingMaskIntoConstraints = false
cover.backgroundColor = .white
cover.widthAnchor.constraint(equalToConstant: 300).isActive = true
cover.heightAnchor.constraint(equalToConstant: 300).isActive = true
cover.clipsToBounds = true
return cover
}()

此封面视图有自己的ImageView:

var coverImageView: UIImageView = {
let imageView = UIImageView(image: nil)
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.backgroundColor = .white
imageView.contentMode = .scaleAspectFill
imageView.isUserInteractionEnabled = true
return imageView
}()

当点击coverView时,它会添加一个UIText字段:

@objc func imageTapped(_ sender: UITapGestureRecognizer) {
guard self.textfield1.text == "" else {return}
self.coverView.addSubview(textfield1)
self.textfield1.centerXAnchor.constraint(equalTo: self.coverView.centerXAnchor).isActive = true
self.textfield1.centerYAnchor.constraint(equalTo: self.coverView.centerYAnchor).isActive = true
self.textfield1.becomeFirstResponder()
}

如果用户点击任意位置,我希望键盘关闭。我使用以下代码:

@objc func keyboardDidShow() {        
let exitTapGesture = UITapGestureRecognizer(target: self, action: #selector(exitKeyboardTap(_:)))
exitTapGesture.name = "exitTap"
exitTapGesture.delegate = self
self.view.addGestureRecognizer(exitTapGesture)
}

但是,只有当我在封面视图的外部点击时,键盘才会关闭。当我敲击盖子内部的任何位置时查看键盘不会关闭。

尝试将手势添加到coverView

private func getTapGesture() -> UITapGestureRecognizer {
let exitTapGesture = UITapGestureRecognizer(target: self, action: #selector(exitKeyboardTap(_:)))
exitTapGesture.delegate = self
return exitTapGesture
}
@objc func keyboardDidShow() {        
coverView.addGestureRecognizer(getTapGesture())
self.view.addGestureRecognizer(getTapGesture())
}

最新更新