将点击事件从 UIView 转发到内部文本字段



我有一个包含TextField的 xibUIView。我希望我的TextField在触摸父 UIView 时获得焦点。使用Swift 3+执行此操作的更新正确方法是什么?是否可以完全从故事板中做到这一点?(我目前使用的是 Xcode 9 测试版,但欢迎更早的解决方案(

这是我的代码:

import UIKit
@IBDesignable
open class MinimalEditView: UIView, UITextFieldDelegate {
@IBOutlet var textField: UITextField!
@IBInspectable
public var cornerRadius: CGFloat = 2.0 {
didSet {
self.layer.cornerRadius = self.cornerRadius
}
}
@IBInspectable
public var borderWidth: CGFloat = 2.0 {
didSet {
self.layer.borderWidth = self.borderWidth
}
}
@IBInspectable
public var borderColor: UIColor = UIColor.intactBeigeLight {
didSet {
self.layer.borderColor = self.borderColor.cgColor
}
}
public func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
self.textField.becomeFirstResponder()
return true
}
public override init(frame: CGRect) {
super.init(frame: frame)
}
public required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
}

首先,在viewDidLoad中添加手势识别器以检测视图上的点击操作。视图应放置在文本字段的顶部

let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(viewTapped))
view.isUserInteractionEnabled = true
view.addGestureRecognizer(tapGestureRecognizer)

然后,每当点击视图时,都将焦点分配给文本字段

func viewTapped()
{
self.textField.becomeFirstResponder()
}

您可以在父视图上添加 UITapGestureRecognizer。处理点击手势,因为每当点击视图时,将焦点分配给文本字段。

在您的 awakefromnib 中添加 UITapGestureRecognizer 作为

let tap = UITapGestureRecognizer(target: self, action: #selector(viewTapped))
yourParentView.isUserInteractionEnabled = true
yourParentView.addGestureRecognizer(tap)

将水龙头处理为

func handleTap(_ gesture: UITapGestureRecognizer){
{
self.yourTextField.becomeFirstResponder()
}

最新更新