Reputation: 55
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.
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.
// 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')
}
}
I check all error and solve.
Upvotes: 1
Views: 65
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