Swift UIImageView isUserInteractionEnabled=true不';行不通

Swift UIImageView isUserInteractionEnabled=true不';行不通,swift,uiimageview,isuserinteractionenabled,Swift,Uiimageview,Isuserinteractionenabled,下面的DateField类有一个日期字段和一个图标。由于某些原因,fieldIcon.isUserInteractionEnabled=true没有任何影响,并且不会将用户点击传递到该字段。我错过什么了吗 import UIKit import SnapKit protocol DateFieldDelegate: class { func dateSelected(_ dateField: DateField, date: Date) } class DateField: UIVi

下面的
DateField
类有一个日期字段和一个图标。由于某些原因,
fieldIcon.isUserInteractionEnabled=true
没有任何影响,并且不会将用户点击传递到该字段。我错过什么了吗

import UIKit
import SnapKit

protocol DateFieldDelegate: class {
    func dateSelected(_ dateField: DateField, date: Date)
}

class DateField: UIView, UITextFieldDelegate {

    weak var delegate: DateFieldDelegate?
    let field = UITextField()
    private var datePicker: UIDatePicker?

    convenience init(withStartDate startDate: Date) {
        self.init()

        datePicker = prepareDatePicker()
        guard let datePicker = datePicker else { return }
        field.inputView = datePicker
        field.delegate = self

        addSubview(field)
        field.snp.makeConstraints { make in
            make.top.equalToSuperview()
            make.leading.equalToSuperview()
            make.trailing.equalToSuperview()
            make.height.equalTo(37)
            make.bottom.equalToSuperview()
        }

        let fieldIcon = UIImageView(image: UIImage(asset: Asset.calendar))
        field.addSubview(fieldIcon)
        fieldIcon.isUserInteractionEnabled = true  // doesn't work
        fieldIcon.snp.makeConstraints { make in
            make.width.equalTo(21)
            make.height.equalTo(23)
            make.trailing.equalToSuperview().offset(-10)
            make.centerY.equalToSuperview()
        }

        setStyle(.regular)
    }

    func textFieldDidEndEditing(_ textField: UITextField) {
        guard let date = datePicker?.date else { return }
        field.text = date.formatToString()
        delegate?.dateSelected(self, date: date)
    }

    private func prepareDatePicker() -> UIDatePicker {
        let datePicker = UIDatePicker()
        datePicker.datePickerMode = .date
        datePicker.setDate(Date(), animated: false)
        datePicker.locale = Language.appLocale()
        return datePicker
    }
}

不确定我是否遗漏了您的代码中的某些内容,但您需要在图像中添加某种操作,启用
userInteractionEnabled
不会告诉它识别项目上的点击以及发生这种情况时要做什么。您需要向
UIImageView

let fieldIcon = UIImageView(image: UIImage(asset: Asset.calendar))
field.addSubview(fieldIcon)
fieldIcon.isUserInteractionEnabled = true  // doesn't work

let fieldIcon = UIImageView(image: UIImage(asset: Asset.calendar))
field.addSubview(fieldIcon)

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(calenderIconTapped))
fieldIcon.addGestureRecognisor(tapGesture)

func calenderIconTapped() {
    // show the picker
}
更新:

重读你的问题后,我明白你现在想做什么。如果您想让图像视图上的任何点击通过下面的
UITextField
,则需要执行与您尝试的相反的操作。。。您需要在
UIImageView上将
userInteractionEnabled
设置为
false

fieldIcon.isUserInteractionEnabled = false

fieldIcon.isUserInteractionEnabled=false
不起作用。只是为了向其他人澄清;
fieldIcon
位于文本字段上方,我希望点击按钮可以通过并激活文本字段。这正是
isUserInteractionEnabled=false
应该做的,如果我尝试使用false,它就不起作用了。根据当设置isUserInteractionEnabled=false
(触摸事件)从事件队列中移除时,
isUserInteractionEnabled=true
适用于常规UIView;UIImageView中有一些东西可以防止触摸进入下面的视图。