首页 > 解决方案 > 如何使 UIBarButtonItem 文本在 UIPickerView 中可见?

问题描述

有没有人遇到过 UIToolbar 中的 UIBarButtonItem 文本(在 UIDatePicker 中调用)在单击此 UIBarButtonItem 之前不可见的问题?什么可能导致这个问题?

在这里你看不到按钮

但是当你点击它应该是的屏幕时,你可以看到它出现了

我尝试了一切,但问题仍然与每个 UIPickerView 相关(包括 UIDatePicker)

这是我的实现:

@objc func createDatePicker() {
        datePicker.datePickerMode = .date

        //ToolBar
        let toolbar = UIToolbar();
        toolbar.sizeToFit()
        let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(doneDatePicker));
        let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.flexibleSpace, target: nil, action: nil)
        let cancelButton = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(cancelDatePicker));
        // I've tried to change color of the label, but it didn't help
        //toolbar.tintColor = UIColor.black
        toolbar.setItems([cancelButton,spaceButton,doneButton], animated: false)


        dateTextfield.inputAccessoryView = toolbar
        dateTextfield.inputView = datePicker
    }

使用此代码,这些按钮是不可见的,但是当您单击这些按钮应该位于的位置时,会出现单击按钮的文本。但是有没有办法让它一直可见?这种行为的原因可能是什么?

我是ios的新手。所以我会非常感谢你的帮助!提前致谢。

标签: iosswiftdatepickeruipickerviewuidatepicker

解决方案


试试这个代码。在这里,我在文本字段中添加 DatePicker 开始编辑。

func openDatePickerForTextField(_ sender: UITextField) {
    //move view if
    moveViewYPositionForDatePicker()
    let datePickerView = UIDatePicker()
    datePickerView.datePickerMode = .date
    sender.inputView = datePickerView
    datePickerView.addTarget(self, action: #selector(handleDatePicker(sender:)), for: .valueChanged)
    addKeyboardToolBar(onTextfield: sender, onPicker: datePickerView)
}

//MARK:- Add done button on Picker View
func addKeyboardToolBar(onTextfield textField : UITextField, onPicker pickerView : UIDatePicker) {
    let keyboardToolBar = UIToolbar(frame: CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat(pickerView.frame.size.width), height: CGFloat(25)))
    keyboardToolBar.sizeToFit()
    keyboardToolBar.barStyle = .black
    textField.inputAccessoryView = keyboardToolBar
    let nextButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(doneButtonPressed))
    keyboardToolBar.items = [UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil), nextButton]
}

推荐阅读