Где я ошибаюсь, добавляя изображения в свой UIPickerView? - PullRequest
0 голосов
/ 23 марта 2020

Mine - образовательное приложение, студенту дается слово, а затем он должен выбрать соответствующее изображение (скажем, сопоставить слово банан с изображением одного, где изображение находится в UIPickerview). Однако мой следующий код дает нет результатов:

let possibleAnswers = [UIImage(named: Images.one), UIImage(named: Images.two), UIImage(named: Images.three), UIImage(named: Images.four)]

    fileprivate let pickerView: UIPickerView = {
       let pv = UIPickerView()
        pv.translatesAutoresizingMaskIntoConstraints = false
        return pv
    }()

 override func viewDidLoad() {
    pickerView.delegate = self
    pickerView.dataSource = self
  }

extension ViewController: UIPickerViewDataSource {

    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return possibleAnswers.count
    }
}

extension ViewController: UIPickerViewDelegate {

    func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {

        let myImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 220, height: 61))

        myImageView.image = possibleAnswers[row]

        return myImageView
    }

}

Я что-то не так делаю? Как я могу исправить это?

РЕДАКТИРОВАТЬ 1:

Image to show what the erroneous view looks like Вот как выглядит ошибочное представление.

1 Ответ

0 голосов
/ 23 марта 2020

Установите высоту строки PickerView в соответствии с размером изображения, используя rowHeightForComponent функция

 class ViewController: UIViewController,UITextFieldDelegate{
        fileprivate let possibleAnswers:[UIImage] = [UIImage(named: "apple.png")!,UIImage(named: "banana.png")!,UIImage(named: "orange.png")!]
        fileprivate var pickerView: UIPickerView?
        fileprivate var toolBar:UIToolbar?

        override func viewDidLoad() {
            super.viewDidLoad()

            view.backgroundColor = .systemBackground

            view.addSubview(btn)
            btn.translatesAutoresizingMaskIntoConstraints = false
            btn.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
            btn.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
            btn.addTarget(self, action: #selector(test), for: .touchUpInside)
        }

        //MARK: Components
        let btn :UIButton = {
            let btn = UIButton(type: .system)
            btn.setTitle("Select Correct Answer", for: .normal)
            return btn
        }()

    }

    // MARK: Pickerview Delegate
    extension ViewController: UIPickerViewDelegate,UIPickerViewDataSource {
        func numberOfComponents(in pickerView: UIPickerView) -> Int {
               return 1
           }

           func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
               return possibleAnswers.count
        }

        func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {

            let myImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
            myImageView.image = possibleAnswers[row]

            return myImageView
        }

        func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
            return 100
        }

    }

    //MARK: Functions
    extension ViewController{
        @objc func test(){
            pickerView = UIPickerView.init()
            pickerView!.delegate = self
            pickerView!.backgroundColor = UIColor.white
            pickerView!.setValue(UIColor.black, forKey: "textColor")
            pickerView!.autoresizingMask = .flexibleWidth
            pickerView!.contentMode = .center
            pickerView!.frame = CGRect.init(x: 0.0, y: UIScreen.main.bounds.size.height - 300, width: UIScreen.main.bounds.size.width, height: 300)
            self.view.addSubview(pickerView!)

            toolBar = UIToolbar.init(frame: CGRect.init(x: 0.0, y: UIScreen.main.bounds.size.height - 300, width: UIScreen.main.bounds.size.width, height: 50))
            toolBar!.barStyle = .blackTranslucent
            toolBar!.items = [UIBarButtonItem.init(title: "Done", style: .done, target: self, action: nil)]
            self.view.addSubview(toolBar!)
        }
    }

Result

...