2017-05-18 73 views
0

這是我的源代碼,我所做的是讓storyBoard上的選取器視圖。通過控制+拖動在該控制器中製作IBOutlet。PickerView只顯示'?'

然而,它可以被編譯,只有'?'出現在選取器視圖中。

問題在哪裏?

import UIKit 

class SelectViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate{ 
    var songNames = ["test1","test2","test3"] 

    @IBOutlet weak var songPicker: UIPickerView! 

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

控制檯中是否顯示任何內容?你能顯示這個截圖嗎?此外,如果你硬編碼字符串,會發生什麼......'返回「Blah」'而不是從數組中返回。另外,如果'songNames'沒有改變,它應該是'let'。 – Fogmeister

回答

2

您錯過了dataSource方法中的forComponent參數。在titleForRow功能添加這樣的:

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

這應該可以解決您所遇到的問題。

+0

這實際上什麼都不做。 – Fogmeister

+0

他的_titleForRow_委託方法缺少參數_forComponent_。 – kkakkurt

+1

這就是爲什麼有沒有其他細節的文本「你可以試試這個解決方案」的答案是一個壞主意。 (特別是當你改變一些更明顯的代碼時)。評論你的代碼並評論你的答案。你現在有一個技術上正確的答案(但仍然是一個可憐的答案)的投票。 – Fogmeister