2017-02-07 3 views
0

hallo Jungs Uiviewcontroller Ich versuche, einige util zu machen, die ichiOS - wie Picker Daten zu setzen, wenn ich uiview verwenden

kk wie Pokedex brauchen, aber ich habe ein Problem. Ich mache den Picker in einer separaten Ansicht und ich rufe diese Ansicht in tabview und verwenden Sie es.

aber ich weiß nicht, wie man die Daten einstellt. Wenn ich Picker in uiviewcontroller mache, kann ich Daten in didload setzen? Methode, aber in uiview gibt es keine didload Methode, die ich einstellen kann.

dies ist mein Code

SelectPoke.swift

class SelectPoke: UIView , UIPickerViewDelegate , UIPickerViewDataSource{ 
@IBOutlet var textField: UITextField! 

var data = ["1","2","3"] 
var picker = UIPickerView() 

public func numberOfComponents(in pickerView: UIPickerView) -> Int { 
    return 1 
} 

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

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    textField.text = data[row] 
} 

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

func h(){ 
    picker.delegate = self 
    picker.dataSource = self 
} 

override func awakeFromNib() { 
    h() 
} 

class func instanceFromNib() -> UIView { 
    return UINib(nibName: "SelectPoke", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! UIView 
} 

}

Tab1ViewController.swift

class Tab1ViewController: UIViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() 


    let sideView = SelectPoke.instanceFromNib() 
    sideView.frame = self.view.frame 

    self.view.addSubview(sideView) 
} 

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

}

plz helfen mir. mein Pokemon wartet ..

+0

Ist es wirklich beabsichtigt, dass Sie 'SelectPoke' als eine UIView-Unterklasse verwenden? Normalerweise würden Sie den Delegaten und die Datenquelle im 'Tab1ViewController' implementieren. –

+0

Überprüfen Sie, ob die initWithCoder-Methode beim Laden der Ansicht aufgerufen wird. –

Antwort

0

Normalerweise würden Sie UIPickerView, nicht Unterklasse, sondern eine Ansicht in einem Storyboard (oder XIB-Datei) und verbinden die Delegierten und Datenquelle mit dem Tab1ViewController erstellen.

Dennoch in diesem Code werden wir gerade ein neues UIPickerView in viewDidLoad, erstellen Sie den Code ähnlich der ursprünglichen Frage zu halten

Bemerkung: Zur Zeit habe ich keine Xcode laufen, so könnte es sein, kleine syntactial Fehler in diesem Codebeispiel

class Tab1ViewController: UIViewController, UIPickerViewDelegate , UIPickerViewDataSource { 

    var data = ["1","2","3"] 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let sideView = UIPickerView() 
     sideView.frame = self.view.frame 

     self.view.addSubview(sideView) 
     sideView.delegate = self 
     sideView.dataSource = self 

    } 

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

    public func numberOfComponents(in pickerView: UIPickerView) -> Int { 
     return 1 
    } 

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

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
     textField.text = data[row] 
    } 

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