Почему я не могу нажать кнопку UIB внутри моего UIPickerView? - PullRequest
1 голос
/ 21 января 2020

У меня есть UIPickerView с добавленным к нему элементом UIToolBar (кнопка Готово ). Но когда я выбираю кнопку, она должна что-то печатать на консоль через #selector(dismissKeyboard), но это не так.

Я относительно новичок в Swift и делаю все программно, поэтому мне просто трудно понять, почему я не могу взаимодействовать с кнопкой, добавленной в качестве подпредставления к моему pickerView.

Вот соответствующий код, с которым я работаю ... Пожалуйста, дайте мне знать, если вам нужна дополнительная информация ...

Как сторона, я уже назначил делегата и источник данных для pickerView, и я вызываю функцию createToolBar() внутри viewDidLoad.

    var timerImage = UIButton()
    var timer = Timer()
    var timerDisplayed = 0
    let image1 = UIImage(named: "stopwatch")
    let timePicker = UIPickerView()

    @objc func dismissKeyboard(){
        print("PickerView Dismissed")
        view.endEditing(true)
    }

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

    func createToolBar(){
        let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(dismissKeyboard))
        let toolBar = UIToolbar(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height))

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

        timePicker.addSubview(toolBar)
        self.view.bringSubviewToFront(toolBar)    
    }

    @objc func timeClock(){
        view.addSubview(timePicker)
        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)
        }
    }

1 Ответ

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

Поправьте меня, если я ошибаюсь, но похоже, что вы технически не вызвали print в функции. Если вы хотите, чтобы что-то печаталось в консоли, код должен выглядеть примерно так:

   { error in 
     if let error = error {
       print("Error")
         }
     }

(это может содержаться в вашем DispatchQueue). Если вы не сообщаете себе об ошибке, просто что-то вроде -

 } else {
   print("Button Tapped")
     }
  }

- также должно работать. Надеюсь, это поможет! Удачи!

...