简体   繁体   中英

PickerView doesn't show any value. It gives warning like no index path for table cell being reused?

I have created a UIView class in which I have declared pickerView and implement all necessary delegates. When I click on textfield, no value is shown in pickerView and warning comes in log

no index path for table cell being reused .

Please help me find out the solution of this.

import UIKit

class CustomPickerView: UIView, UIPickerViewDelegate, UIPickerViewDataSource {

var pickerView = UIPickerView()
var pickerString: String?
var pickerArray = NSArray()

class var instance: CustomPickerView
{
    let pickerVC = CustomPickerView()
    return pickerVC
}

override init(frame: CGRect) {
    super.init(frame : frame)

    pickerView.delegate = self
    pickerView.dataSource = self
    pickerView.backgroundColor = UIColor.yellowColor()
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

func setValueOfPicker(text: String, array: NSArray, textField: UITextField) -> Void {
    pickerString = text
    pickerArray = array
    setPicker(textField)
    pickerView.reloadAllComponents()
    pickerView.selectRow(0, inComponent: 0, animated: true)
}

//MARK:
//MARK: Piker View Delegate & DataSource
//MARK:

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
    return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return pickerArray.count
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    if pickerString == "country" {
        return pickerArray[row].valueForKey("country") as? String
    }
    else if pickerString == "printCoupon"
    {
        return pickerArray[row] as? String
    }
    return nil
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

}

func setPicker(dataTextField: UITextField)
{
    dataTextField.inputView = pickerView;
    let doneToolbar: UIToolbar = UIToolbar()

    let flexSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)
    let done: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: self, action: #selector(donePickerAction))
    let cancle: UIBarButtonItem = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.Done, target: self, action: #selector(canclePickerAction))

    var items = [UIBarButtonItem]()
    items.append(cancle)
    items.append(flexSpace)
    items.append(done)
    doneToolbar.sizeToFit()
    doneToolbar.items = items

    dataTextField.inputAccessoryView = doneToolbar
}

Try to implement this method

func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView
{
    let pickerLabel = UILabel()

    if pickerString == "country" {
        pickerLabel.text = pickerArray[row].valueForKey("country") as? String
    }
    else if pickerString == "printCoupon"
    {
        pickerLabel.text = pickerArray[row] as? String
    }

    pickerLabel.textAlignment = NSTextAlignment.Center
    return pickerLabel
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM