2016-07-26 1 views
0

私はpickerViewを宣言し、必要なデリゲートをすべて実装したUIViewクラスを作成しました。私は、テキストフィールドをクリックすると、何も値がpickerViewに示されていないと警告がログPickerViewは値を表示しません。それは再利用されている表のセルのためのインデックスパスのような警告を与える?

テーブルセルのためのインデックスパスはを再利用していないされて入って来ています。

解決策を見つけてください。

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 
} 

答えて

0

私はそれを試してみましたが、同じ問題がある。この方法に

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 
} 
+0

を実装するようにしてください。 –

関連する問題