触发UILabel的PickerView,使其以模块化的方式从屏幕底部显示,而不是隐藏/取消隐藏它

时间:2018-10-09 10:56:30

标签: ios swift uilabel uipickerview uitapgesturerecognizer

我在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")
    }
}

2 个答案:

答案 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并在单击标签时为视图添加动画(而不是隐藏/取消隐藏)。