2017-05-18 9 views
1

Ich habe Fehler mit UIPickerViewUIPickerView auf Swift 3

SelectViewController.swift:35:10: Method 'pickerView(pickerView:numberOfRowsInComponent:)' has different argument names from those required by protocol 'UIPickerViewDataSource' ('pickerView(_:numberOfRowsInComponent:)') 

mit SET I UIPickerView auf Storyboard und diese an die variable songPicker befestigt.

und dann denke ich, dass ich die notwendigen Funktionen integriert habe, zeigte es Fehler wie folgt.

Ich fand heraus, dass die Struktur der Picker-Ansicht auf der Version von swift geändert wird.

Allerdings kann die richtige Antwort noch nicht finden.

Mein swift 3,1

Hat mir jemand helfen?

class SelectViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate{ 

    @IBOutlet weak var songPicker: UIPickerView! 

    let songNames = ["test","test2"] 

    override func viewDidLoad(){ 
      songPicker.delegate = self 
      songPicker.dataSource = self 

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


    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
     return songNames.count 
    } 
    func pickerView(pickerView: UIPickerView, titleForRow row: Int) -> String? { 
     return songNames[row] 
    } 
    override func didReceiveMemoryWarning() { 

    } 
} 
+0

Entfernen Sie diese func .. func numberOfComponents (in picker: UIPickerView) -> Int { return 1} –

Antwort

1

Mit dieser Methode finden Sie in der Verwendung von _ vor picker. Das ist das einzige Problem,

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 

    } 
+0

es Dank funktioniert! Ich muss Swift mehr lernen. Übrigens zeigen meine Pickerviews nur '?' im Feld statt "test1" "test2" könnte das aber ein anderes Problem sein .... – whitebear

+0

Ich denke, dass es ein anderes Problem geben kann. Brauchen Sie Ihren vollständigen Code zu überprüfen, sonst sollte der Code, den Sie angegeben haben test1 und test2 –

1

UIPickerViewDataSource Änderungen in schnellen 3 und höher.

Aktualisierte Syntax: -

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

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

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

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 

} 

Werfen Sie einen Blick auf apple documentation (SO Referenz).

+0

gibt es keine Bedeutung in Antworten zu wiederholen ?, Sie bereits gesehen, es ist die gleiche Antwort verfügbar, dann warum das gleiche wieder zu setzen ?. Machen Sie den Stackoverflow zu einem besseren Ort. –

2

versuchen diesen Code

class ElibraryViewController: UIViewController, UIPickerViewDelegate,UIPickerViewDataSource { 

@IBOutlet weak var txtTitle: UITextField! 
@IBOutlet weak var Picker: UIPickerView! 
let songNames = ["test","test2"] 

override func viewDidLoad() 
    { 

     super.viewDidLoad() 


      } 

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? 
    { 


      return songNames[row] 
    } 

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) 
    { 



     let obj = songNames[row] 
     txtTitle.text = obj 



    } 

    func numberOfComponents(in pickerView: UIPickerView) -> Int { 

     return 1 
    } 

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int 
    { 



     return songNames.count 



    } 
override func didReceiveMemoryWarning() { 

    } 
} 
+0

gibt es keine Bedeutung in Antworten zu wiederholen ?, Sie bereits gesehen, es ist die gleiche Antwort verfügbar, dann warum wieder dasselbe ?. Machen Sie den Stackoverflow zu einem besseren Ort. –

0

Ich empfehle Ihnen IQDropDownTextField verwenden - Click Here