멀티컴포넌트로 피커뷰를 만들 때 새롭게 알게된 것은 column값은 2로 지정해서 2개가 표현되는 것은 알았지만 각각의 컴포넌트들이 마치 배열처럼 0,1,2 로 들어가는 개념이 부족해서 인터넷의 도움을 받았다. 컴포넌트를 0,1로 설정되어 있으면 만약 컴포넌트가 0이면 0번째 자리에서 하는 모든 일인 텍스트를 입력 받을때는 해당 컴포넌트만 사용하고 1번째 그리고 그외의 컴포넌트에는 기존의 이미지를 추가할 수 있도록 만든다.
추가로 고민했던 사항은 중간에 텍스트레이블을 건들여 볼려고 했지만 답은 didselectrow를 수정하는 것을 통해 해당 값이 선택되었을 때 동작해야하는 것이므로 선택된 동작이후의 반응을 수정해주도록 앞으로 수정시 참고해야겠다.
import UIKit
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
let MAX_ARRAY_NUM = 10
let PICKER_VIEW_COLUM = 2
let PICKER_VIEW_HEIGHT:CGFloat = 80
var imageArray = UIImage?
var imageFileName = [ "1.jpeg", "2.jpeg", "3.jpeg", "4.jpeg", "5.jpeg", "6.jpeg", "7.jpeg", "8.jpeg", "9.jpeg", "10.jpeg" ]
@IBOutlet var pickerImage: UIPickerView!
@IBOutlet var lblImageFileName: UILabel!
@IBOutlet var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
for i in 0 ..< MAX_ARRAY_NUM {
let image = UIImage(named: imageFileName[i])
imageArray.append(image)
}
lblImageFileName.text = imageFileName[0]
imageView.image = imageArray[0]
}
//returns the number of 'colums' to display
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return PICKER_VIEW_COLUM
}
func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
return PICKER_VIEW_HEIGHT
}
//returns the # of rows in each componet
func pickerView(_ pickerview: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return imageFileName.count
}
// func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
// return imageFileName[row]
// }
func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
let imageView = UIImageView(image: imageArray[row])
imageView.frame = CGRect(x: 0, y: 0, width: 100, height: 150)
return imageView
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
// lblImageFileName.text = imageFileName[row]
// imageView.image = imageArray[row]
if (component==0) {
lblImageFileName.text = imageFileName[row]
}
else {
imageView.image = imageArray[row]
}
}
}