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中有一些东西可以防止触摸进入下面的视图。