UILabel doesn't show inputView

前端 未结 7 1278
长发绾君心
长发绾君心 2020-12-18 07:14

I would use a UILabel to allow users to select a date with UIDatePicker.

To do this, I created an UILabel subclass overwriting the inputView and the inputAccessoryVi

相关标签:
7条回答
  • 2020-12-18 07:49

    This is a code snipet of @dmitriy-kirakosyan updated to Swift 5

    class DatePickerLabel: UILabel {
    
        private let _inputView: UIView? = {
            let picker = UIDatePicker()
            return picker
        }()
    
        private let _inputAccessoryToolbar: UIToolbar = {
            let toolBar = UIToolbar()
            toolBar.barStyle = UIBarStyle.default
            toolBar.isTranslucent = true
    
            toolBar.sizeToFit()
    
            return toolBar
        }()
    
        override var inputView: UIView? {
            return _inputView
        }
    
        override var inputAccessoryView: UIView? {
            return _inputAccessoryToolbar
        }
    
        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
    
            let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItem.Style.plain, target: self, action: #selector(doneClick))
            let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.flexibleSpace, target: nil, action: nil)
    
            _inputAccessoryToolbar.setItems([ spaceButton, doneButton], animated: false)
    
            let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(launchPicker))
            self.addGestureRecognizer(tapRecognizer)
        }
    
        override var canBecomeFirstResponder: Bool {
            return true
        }
    
        @objc private func launchPicker() {
            becomeFirstResponder()
        }
    
        @objc private func doneClick() {
            resignFirstResponder()
        }
    
    }
    
    0 讨论(0)
提交回复
热议问题