我正在尝试将项目加载到 UIPickerView 中,这些项目是从上一个 View 中的prepareforsegue 函数中填充的列表中加载的
class AddItemViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
@IBOutlet weak var ItemPickView: UIPickerView!
@IBOutlet weak var textboxName: UITextField!
var options: [String]?
var name: String?
override func viewDidLoad() {
super.viewDidLoad()
print("viewdidload started")
ItemPickView.delegate = self
ItemPickView.dataSource = self
textboxName.inputView = ItemPickView
print("viewdidload ended")
print(options)
}
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
options!.count
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return options![row]
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
textboxName.text = options![row]
}
}
我的转接代码
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "AddNewItem" {
print("segue started")
let controller = segue.destinationViewController as? AddItemViewController
controller?.options = ["test1","test2","test3"]
print("segue ended")
}
}
看来UIPickerView是在列表更改之前启动的。有什么解决办法吗?
非常感谢
编辑:这是打印语句的日志
segue started
segue ended
viewdidload started
viewdidload ended
nil
fatal error: unexpectedly found nil while unwrapping an Optional value
(lldb)
segue 似乎在 viewdidload 之前完成。那么为什么选项列表没有更新?
最佳答案
一种方法是将文件所有者标记为数据源并委托(delegate)[在 XIB 中]。这样就不需要等待 View didload 来附加必要的数据源和委托(delegate)。
关于ios - 未加载来自 segue 的 UIPickerView 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38250895/