Как сделать текст UIBarButtonItem видимым в UIPickerView? - PullRequest
1 голос
/ 12 апреля 2019

Кто-нибудь сталкивался с проблемой, что текст UIBarButtonItem в UIToolbar (который вызывается в 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. Поэтому я очень ценю вашу помощь! Заранее спасибо.

1 Ответ

0 голосов
/ 12 апреля 2019

Попробуйте этот код. Здесь я добавляю 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]
}
...