Нужно ли добавлять ограничения в мой UIToolBar, если я добавляю его как подпредставление в свой UIPickerView? - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь добавить простую кнопку «Готово» к моему UIPickerView программно, без использования раскадровок.

Когда я пытаюсь добавить toolBar в качестве подпредставления UIPickerView, панель инструментов даже не отображается, и я получаю некоторые ошибки, связанные с ограничениями.

Любая идея о том, как я можно добавить кнопку в PickerView?

Вот фрагмент моего кода:

var timerImage = UIButton()
var timer = Timer()
var timerDisplayed = 0
let image1 = UIImage(named: "stopwatch")
let timePicker = UIPickerView()
let timeSelect : [String] = ["300","240","180","120","90","60","45","30","15"]

let toolBar = UIToolbar()
let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(ThirdViewController.dismissKeyboard))

func pickerViewConstraints(){
    timePicker.anchor(top: nil, leading: view.safeAreaLayoutGuide.leadingAnchor, bottom: view.safeAreaLayoutGuide.bottomAnchor, trailing: view.safeAreaLayoutGuide.trailingAnchor)
}

@objc func timeClock(){
    toolBar.setItems([doneButton], animated: true)
    toolBar.sizeToFit()
    toolBar.isTranslucent = false
    toolBar.isUserInteractionEnabled = true
    toolBar.barStyle = .default

    view.addSubview(timePicker)
    timePicker.addSubview(toolBar)
    pickerViewConstraints()
    timePicker.backgroundColor = .white

    DispatchQueue.main.async {
        self.timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(self.Action), userInfo: nil, repeats: true)
        self.timerImage.setImage(nil, for: .normal)
    }
}

Ответы [ 3 ]

1 голос
/ 21 января 2020

Похоже, это всего лишь несколько незначительных проблем здесь. Вот как я делал это раньше:

    override func viewDidLoad() {
    super.viewDidLoad()

    createToolbar()
}
    // Toolbar for "done"
    func createToolbar() {
        let toolBar = UIToolbar()
        toolBar.sizeToFit()


        let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(PageOneViewController.dismissKeyboard))

        toolBar.setItems([doneButton], animated: false)
        toolBar.isUserInteractionEnabled = true

        // Makes toolbar apply to text fields
        educationText.inputAccessoryView = toolBar
        politicalText.inputAccessoryView = toolBar
        drinkingText.inputAccessoryView = toolBar
        heightText.inputAccessoryView = toolBar
        schoolInput.inputAccessoryView = toolBar
    }

@objc func dismissKeyboard() {
        view.endEditing(true)
    }

Похоже, что вы технически не "вызвали" кнопку панели инструментов / сделано, если я просто не вижу эту часть кода. Также я вложил «готовый» код в функцию.

Если вы используете текстовые поля, вы должны иметь возможность следовать формату «educationText.inputAccessoryView = toolBar», чтобы применить весь код выше для каждого текстового поля (образование, политика, питье, и т. д. c). Надеюсь, это поможет! Удачи.

1 голос
/ 21 января 2020

Нет, вам не нужно добавлять ограничения. Это может быть как:

let space = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let doneButton = UIBarButtonItem(title: buttonTitle, style: .done, target: self, action: #selector(doneButtonAction))
let cancelButton = UIBarButtonItem(title: cancelTitle, style: .plain, target: self, action: #selector(cancelButtonAction))
let barAccessory = UIToolbar(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: 44))
barAccessory.barStyle = .default
barAccessory.isTranslucent = true
barAccessory.barTintColor = .blue
barAccessory.setItems([cancelButton, space, doneButton], animated: false)
picker.addSubview(barAccessory)
self.view.bringSubviewToFront(picker)

Надеюсь, это поможет ...

0 голосов
/ 21 января 2020

Вам необходимо установить делегата типа UIPickerViewDelegate для вашего представления выбора. В этом делегате реализуйте метод делегата pickerView: viewForRow: forComponent: reusingView

, чтобы предоставить настраиваемое представление для элемента средства выбора.

Для предоставленного вами настраиваемого представления вы можете создать его, как хочу, включая добавление кнопки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...