从 UILabel 触发 PickerView 使其以模态方式从屏幕底部出现,而不是 Hide/Unhide 它
Trigger PickerView from UILabel to have it Modally Appear From the Bottom the Screen and not Hide/Unhide It
我在 collectionView 单元格中有一个带有手势识别器的标签。当用户触摸标签时,我希望 pickerView 的外观类似于将 pickerView 附加到 textField 时的外观。
我试过了myLabel.inputView = pickerView
我在下面遇到了这个错误。
Cannot assign to property: 'inputView' is a get-only property
我遇到了一些线程,其中人们隐藏和取消隐藏 pickerView,而不是像它在 textField 中那样弹出和降低,但没有人解释为什么他们 hid/unhid 它。
如何从 UILabel 触发 PickerView?
请注意,我不想 hide/unhide 它像我阅读的其他答案一样。
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")
}
}
我找到了答案。
在评论中 @AshlyMills 说我无法从 UILabel 触发选择器视图的原因是:“这是不可能的,因为 inputView 是 UIResponder属性 上的唯一获取"
我的解决方法是使用 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
}
}
如前所述,属性: 'inputView' 是 UILabelView 上的一个 get-only。
如果您坚持点击一个标签来获得您的 pickerView,在情节提要中,您需要在视图中使用一个固定的 UIPickerView,并在点击标签时为视图设置动画(而不是 hiding/unhiding)。
我在 collectionView 单元格中有一个带有手势识别器的标签。当用户触摸标签时,我希望 pickerView 的外观类似于将 pickerView 附加到 textField 时的外观。
我试过了myLabel.inputView = pickerView
我在下面遇到了这个错误。
Cannot assign to property: 'inputView' is a get-only property
我遇到了一些线程,其中人们隐藏和取消隐藏 pickerView,而不是像它在 textField 中那样弹出和降低,但没有人解释为什么他们 hid/unhid 它。
如何从 UILabel 触发 PickerView?
请注意,我不想 hide/unhide 它像我阅读的其他答案一样。
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")
}
}
我找到了答案。
在评论中 @AshlyMills 说我无法从 UILabel 触发选择器视图的原因是:“这是不可能的,因为 inputView 是 UIResponder属性 上的唯一获取"
我的解决方法是使用 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
}
}
如前所述,属性: 'inputView' 是 UILabelView 上的一个 get-only。
如果您坚持点击一个标签来获得您的 pickerView,在情节提要中,您需要在视图中使用一个固定的 UIPickerView,并在点击标签时为视图设置动画(而不是 hiding/unhiding)。