Akira Kusama
Akira Kusama

Reputation: 55

Why doesn't picture show with UIPickerView?

What to do

I hope to show picture and message when user use UIPickerView. Now it can show message with UIPickerview, However picture isn't shown. I wanted to use array, but I can't use. That's why I wrote code and make error.

What happened ?

I tried to make code which is for showing picture when UIPickerView is selected.the app is done and shown. However,picture isn't shown.

Source

// ViewController.swift

import UIKit

 class ViewController: UIViewController,UIPickerViewDataSource,UIPickerViewDelegate {
    @IBOutlet weak var introduce: UITextView!
    @IBOutlet weak var imageV: UIImageView!
    @IBOutlet weak var pickerview: UIPickerView!
    let names = ["A","B","C","D","E"]
    let message = [
        "A",
        "B",
        "C",
        "D",
        "E"]


    //let picture = ["A.png","B.png","C.png","D.png","E.png"]



    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        // Delegate Setting
        pickerview.delegate = self
        pickerview.dataSource = self

    }

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

    var rownumber = 0

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

    func pickerView1(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
    -> Int {
        rownumber = row
        return rownumber

    }


    // What UIPickerView shows at first time
    func pickerView(_ pickerView: UIPickerView,
                    titleForRow row: Int,
                    forComponent component: Int) -> String? {

        return names[row]
    }


    func readimg(rimg:Int) -> UIImageView {
        if rownumber == 0 {

            let imageV1 = UIImage(named:"A.png")
            imageV.image = imageV1

        }
        if rownumber == 1 {

            let imageV1 = UIImage(named:"B.png")
            imageV.image = imageV1

        }
        if rownumber == 2 {

            let imageV1 = UIImage(named:"C.png")
            imageV.image = imageV1

        }
        if rownumber == 3 {

            let imageV1 = UIImage(named:"D.png")
            imageV.image = imageV1

        }
        if rownumber == 4 {

            let imageV1 = UIImage(named:"E.png")
            imageV.image = imageV1

        }

        return imageV

    }

    // When Row Of UIPickerView is selected
    func pickerView(_ pickerView: UIPickerView,
                    didSelectRow row: Int,
                    inComponent component: Int) {
       introduce.text  = message[row]

        // If I write it sentence, it has error.
       readimg(rimg: Int)
       // Error Code (Editor placeholder in source file/Cannot convert value of type 'Int.Type' to expected argument type 'Int')


    }



}

What did I?

I check all error and solve.

Upvotes: 1

Views: 65

Answers (1)

seto nugroho
seto nugroho

Reputation: 1379

You need to pass integer value to readimg(rimg: Int) method. So change it to pass row value inside pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) method.

So it become like this.

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
   introduce.text  = message[row]
   readimg(rimg: row)
}

In addition to that, readimg method does not need to return UIImageView if you decide to assign imageV value inside that function, so you might want to change its method signature to return void.

func readimg(rimg:Int) {
  // Your method implementation
}

Upvotes: 1

Related Questions