ios - 将点击事件从 UIView 转发到内部 TextField

标签 ios swift uiview

我有一个包含 TextField 的 xib UIView。我希望我的 TextField 在父 UIView 被触摸时获得焦点。使用 Swift 3+ 执行此操作的更新正确方法是什么?是否可以完全通过 Storyboard来完成此操作? (我目前使用的是 Xcode 9 beta,但欢迎使用早期的解决方案)

这是我的代码:

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 中添加一个手势识别器来检测 View 上的点击操作。 View 应放置在文本字段的顶部

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

然后,每当您的 View 被点击时,将焦点分配给文本字段

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

关于ios - 将点击事件从 UIView 转发到内部 TextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45093239/

相关文章:

ios - 如何在 objective-c 中给 imageView 标签

ios - "Add New Constraints"为什么左边和右边是-16,而不是0?

ios - 在 Swift 中将参数传递给操作函数

ios - 从 AppDelegate.m 加载 View (默认情况下的其他 View )

ios - Segue 不会执行 Swift

ios - 类型 'AppDelegate' 的值没有成员 'manageObjectContext'

ios - 在 Parse.com 中存储 UIView

ios - 无法识别的实例已发送至 - 委托(delegate)

ios - 查找对象数组的索引

swift - 使用 Alamofire 登录 : Could not cast value of type '__NSSingleEntryDictionaryI' (0x103860210) to 'NSString' (0x102e66c40)