UIPickerView文本加图像

时间:2016-03-09 19:59:04

标签: ios swift uipickerview

是否可以在一行中创建文本和图像的UIPickerView?

我知道如何仅用文字创建它:

class FirstViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {

    var currArray = ["USD","GBP"] 
    var flags = ["USD.jpg", "GBP.jpg"]
    var picker = UIPickerView()

    @IBOutlet weak var currencySelectorLabel: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()

        picker.delegate = self
        picker.dataSource = self

        currencySelectorLabel.inputView = picker

    }


    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        self.view.endEditing(true)
    }


    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


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

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

    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        currencySelectorLabel.text = currArray[row]
    }

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return currArray[row]
    }
}

但我希望有这样的事情:

enter image description here

显然,代替图像文件的名称应该是真实的图像。

我想从UIPickerView分配标签文本,就像现在一样。

在这篇文章How can I get images to appear in UI PickerView Component in Swift?的帮助下,一切似乎都有效!

1 个答案:

答案 0 :(得分:0)

试试这个在 PickerView 中实现标题和图片

@IBOutlet weak var pickerView: UIPickerView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        picker.delegate = self
        picker.dataSource = self

        currencySelectorLabel.inputView = picker
    }
    
    // MARK: UIPickerViewDataSource
    
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
            return 1
        }
        
        func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
            return currArray.count
        }
        
        func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
            return currArray[row] as? String
        }
    // MARK: UIPickerViewDelegate
    
    func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView {
     
            let myView = UIView(frame: CGRect(x: 0, y: 0, width: pickerView.bounds.width - 50, height: 40))
    
            let myImageView = UIImageView(frame: CGRect(x: 60, y: 0, width: 30, height: 30))
    
            let countryLabel = UILabel(frame: CGRect(x: 110, y: 0, width: pickerView.bounds.width - 90, height: 40 ))
    
            myImageView.image = flags[row]
            countryLabel.font = UIFont.boldSystemFont(ofSize: 16.0)
            countryLabel.textColor = UIColor.white
            countryLabel.text = currArray[row] as? String
            myView.addSubview(countryLabel)
            myView.addSubview(myImageView)
    
            return myView
    
    }
    
    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    
        // do something with selected row
    }