UIPickerView 将数据传递给容器视图

Posted

技术标签:

【中文标题】UIPickerView 将数据传递给容器视图【英文标题】:UIPickerView passing data to Container View 【发布时间】:2019-06-10 08:54:19 【问题描述】:

我查看了 StacksOverflow 上的一些容器视图问题,但没有一个使用选择器视图将数据传递到容器视图中的 tableview 单元格。我试过使用:

    func pickerView( _ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) 
    func prepare(for segue: UIStoryboardSegue, sender: Any?) 
        if segue.identifier == "containerSettingsSegue" 
            let destination = segue.destination as! SettingsTableViewController
            destination.delegate = self
            destination.languageDetail.text = myPickerData[row]
        
    

还有

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    if segue.identifier == "containerSettingsSegue" 
        let destination = segue.destination as! SettingsTableViewController
        destination.delegate = self
    

以上两个代码都在我的父视图中。

但是,它不起作用。有什么办法可以做到吗?

【问题讨论】:

【参考方案1】:

感谢@TBlank 的回答https://***.com/a/34349405/1142743

所以按照他的回答代码应该如下:

SettingsViewController 中声明SettingsTableViewController 的实例,例如:

var childView : SettingsTableViewController?


override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
        if segue.identifier == "containerSettingsSegue" 
            childView = segue.destination as? SettingsTableViewController
            childView!.delegate = self
        


     


func pickerView( _ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) 
            childView?.changeLabel(text: myPickerData[row])
    

所以现在在SettingsTableViewController 中声明一个方法,如下所示

func changeLabel(text: String) 
        languageDetail.text = text
    

【讨论】:

我声明了一个 var selectedRow = 0,其余的如下,但它崩溃了......说“线程 1:致命错误:在隐式展开可选值时意外发现 nil” 它在'destination.languageDetail.text = myPickerData[selectedRow]'的行和languageDetail中崩溃,在SettingsTableViewController的viewdidload中,我将它设置为'English' 已将具体文件发送给您 它是一个容器视图,嵌入其中的是一个tableview 已邮寄给您

以上是关于UIPickerView 将数据传递给容器视图的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据传递给嵌套控制器(UIContainerView)?

如何通过数组将数据传递给表格视图?

将数据传递给 jQuery UI 对话框

CodeIgniter 将数据传递给视图

使用 performSegue 将数据传递给目标视图控制器

将数据传递给视图控制器