@yohoho (yo hoho)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

XCode、Swift:ButtonとPickerViewの選択に合わせて画像を表示したい

解決したいこと

XCode、Swiftの質問です。Storyboardを使っています。

ButtonとPickerViewの選択に合わせた画像を表示したいです。

Buttonを3つ【イルカ】【犬】【猫】を設置し、PickerViewを1つ:データリスト【【青、赤、黄色】、【丸、四角】】を設置しました。
Buttonで最後に押された項目(例えば:イルカ)とPickerViewの1つ目のコンポーネントで選択されたデータ(例えば:青)を組み合わせた画像(例えば:青いイルカ)を表示するアプリを作成したいです。

用意している画像(と画像名、すべてpng file)は次の9つです。
青いイルカ(iruka-1)、青い犬(inu-1)、青い猫(neko-1)、
赤いイルカ(iruka-2)、赤い犬(inu-2)、赤い猫(neko-2)、
黄色いイルカ(iruka-3)、黄色い犬(inu-3)、黄色い猫(neko-3)

発生している問題・エラー

Buttonを押したときに画像が表示されますが、PickerViewで選択が起こったときには表示されません。
PickerViewで選択した際にも該当の画像が表示されるようにしたいです。

該当するソースコード

import UIKit


class ViewController: UIViewController,UIPickerViewDelegate,UIPickerViewDataSource {
    //Storyboardとの設定・紐付け

    @IBOutlet weak var ImageView: UIImageView!

    @IBOutlet var pickerview: UIPickerView!

    @IBOutlet var Button01: UIButton!
    @IBOutlet var Button02: UIButton!
    @IBOutlet var Button03: UIButton!

    //imageList(画像名の割当)
    let imageList = [["1","2","3"],["maru","shikaku"]]

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }
    //UIPickerViewの列の数を返す
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return imageList.count
     }

    //UIPickerViewの行数、リストの数を返す
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
        return imageList[component].count
    }

    //UIPickerViewの画面での表示を指定する
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?{
        return imageList[component][row]
    }  

    //画像を表示するfunc
    func view_image(file_image: String){
        let  file_image2 = "\(imageList[pickerview.selectedRow(inComponent:0)]).png"
        ImageView.image = UIImage(named: "\(file_image)\(file_image2)")
    }

    //Buttonが押されたときのAction

    @IBAction func tapButton01(_ sender: Any){
        let file_image = "iruka-"
        view_image(file_image: file_image)
    }
    @IBAction func tapButton02(_ sender: Any){
        let file_image = "inu-"
        view_image(file_image: file_image)
    }

    @IBAction func tapButton03(_ sender: Any) {
        let file_image = "neko-"
        view_image(file_image: file_image)
    }

    //UIPickerViewが選択されたときの動作
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int){

        view_image(file_image: file_image)
    }



    override func didReceiveMemoryWarning() {
        super.viewDidLoad()
    }


}

自分で試したこと

pickerView内に引数を受け渡すことができない+Buttonで設定したfile_imageを@IBAction外で引き継げないという2つの問題がありそうです。ですが解決方法が分からなく、困っています。
よろしくお願いいたします。

0 likes

1Answer

imageList と同じように file_image(命名規則は揃えたほうが良いですね)というプロパティを追加したら良いのではないでしょうか。

0Like

Your answer might help someone💌