我在collectionView单元格内带有带有手势识别器的标签。当用户触摸标签时,我希望pickerView的外观类似于将pickerView附加到textField时的外观。
我尝试了myLabel.inputView = pickerView
我在下面收到此错误。
无法分配给属性:“ inputView”是仅获取属性
我遇到了一些线程,人们在其中隐藏和取消隐藏pickerView,而不是像从textField那样弹出和降低pickerView,但是没有人解释为什么隐藏/取消隐藏它。
如何从UILabel触发PickerView?
应该注意,我不想像我阅读的其他答案一样隐藏/取消隐藏它。
class MyCell: UICollectionViewCell {
lazy var pickerView = UIPickerView()
let myLabel: UILabel = {
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.isUserInteractionEnabled = true
return label
}()
override init(frame: CGRect) {
super.init(frame: frame)
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(triggerPickerView))
myLabel.addGestureRecognizer(tapGesture)
}
@objc func triggerPickerView() {
print("triggerPickerView")
}
}
答案 0 :(得分:0)
我找到了答案。
@AshlyMills在评论中说,我无法从UILabel触发选择器视图的原因是:“ 不可能,因为inputView是UIResponder的getonly属性”
我的解决方法是使用UITextField并使其清楚。我将pickerView作为inputView
添加到了textFiled中。我将其直接放在标签上,然后按它,pickerView从底部以模态形式出现,并且标签仍然可见。我删除了手势识别器,因为它不是必需的。
class MyCell: UICollectionViewCell {
lazy var pickerView = UIPickerView()
let myLabel: UILabel = {
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.isUserInteractionEnabled = true
return label
}()
let clearTextField: UITextField = {
let textField = UITextField()
textField.translatesAutoresizingMaskIntoConstraints = false
textField.backgroundColor = .clear
return textField
}()
override init(frame: CGRect) {
super.init(frame: frame)
addSubview(clearTextField)
clearTextField.topAnchor.constraint(equalTo: myLabel.topAnchor).isActive = true
clearTextField.leftAnchor.constraint(equalTo: myLabel.leftAnchor).isActive = true
clearTextField.rightAnchor.constraint(equalTo: myLabel.rightAnchor).isActive = true
clearTextField.bottomAnchor.constraint(equalTo: myLabel.bottomAnchor).isActive = true
clearTextField.inputView = pickerView
}
}
答案 1 :(得分:0)
如上所述,属性:“ inputView”是UILabelView上的只读对象。
如果您坚持要单击标签以具有pickerView,则在情节提要中,在视图内需要固定的UIPickerView并在单击标签时为视图添加动画(而不是隐藏/取消隐藏)。