Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在容器视图中将数据传递给控制器_Ios_Swift3_Uicontainerview - Fatal编程技术网

Ios 在容器视图中将数据传递给控制器

Ios 在容器视图中将数据传递给控制器,ios,swift3,uicontainerview,Ios,Swift3,Uicontainerview,我有以下设置:一个带有菜单头和菜单项的集合视图,当我选择一个菜单项时,它应该更新视图右侧的内容。在视图的右侧,我有一个标签和一个分段控件 当我选择一个项目时,它应该更新这两个容器视图(它们有一个带有嵌入式segue的控制器)。当我选择分段控件时,将加载不同的视图控制器 现在我试着这样做: var selectedItem:String! var服务:[字符串]! 然后,我使用prepare(for:sender:)将selectedItem传递给屏幕上显示的控制器。但是,我认为这不起作用,因为

我有以下设置:一个带有菜单头和菜单项的集合视图,当我选择一个菜单项时,它应该更新视图右侧的内容。在视图的右侧,我有一个标签和一个分段控件

当我选择一个项目时,它应该更新这两个容器视图(它们有一个带有嵌入式segue的控制器)。当我选择分段控件时,将加载不同的视图控制器

现在我试着这样做:

var selectedItem:String!
var服务:[字符串]!

然后,我使用
prepare(for:sender:)
selectedItem
传递给屏幕上显示的控制器。但是,我认为这不起作用,因为控制器已经加载

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "overviewSegue" {
            let controller = segue.destination as! ServiceOverViewController
            if let item = selectedItem {
                controller.setupViewWithService(service: item)
            }
        }
    }

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        self.titleLabel.text = services[indexPath.section].items[indexPath.row].name
        let overview = services[indexPath.section].items[indexPath.row]
        selectedItem = overview
    }

如何在collectionView中选择一个项目,在containerView中的两个控制器中设置数据?

您可以将segue删除到
服务概览控制器
,然后在
中,didSelectItemAt:
方法:

  • 从当前情节提要实例化
    ServiceOverViewController

  • 将项目分配给此控制器:
    controller.setupViewWithService(服务:项目)

  • 现在是控制器
  • 代码将如下所示:

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
            self.titleLabel.text = services[indexPath.section].items[indexPath.row].name
            if let overview = services[indexPath.section].items[indexPath.row]{
    
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            let viewController = storyboard.instantiateViewController(withIdentifier :"ServiceOverViewController") as! ServiceOverViewController
            viewController.setupViewWithService(service: item)
            self.present(viewController, animated: true)
        }
    
    }
    

    您是否创建了从collectionViewCell到ContainerView的segue?否,我在布局中有一个容器视图,其中有一个到该容器视图控制器的嵌入segue。我不太确定从collectionViewCell到containerView的segue应该如何修复它?我问这个问题是因为没有调用
    perfromSegue
    ?我不能调用performSegue,因为我相信嵌入segue只发生一次。所以它只执行一次,所以当我点击一个单元格时,它不会被更新。是的,你可以在基类中声明一个方法,现在就在这个方法中传递你想要的参数,来到您的主类,它也是从基类继承的,在这里定义该方法,并在开关情况下处理编码_yourcainer
    show/hide
    logic&不要忘记调用`[[u segmentedControl setSelectedSegmentIndex:0];'
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
            self.titleLabel.text = services[indexPath.section].items[indexPath.row].name
            if let overview = services[indexPath.section].items[indexPath.row]{
    
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            let viewController = storyboard.instantiateViewController(withIdentifier :"ServiceOverViewController") as! ServiceOverViewController
            viewController.setupViewWithService(service: item)
            self.present(viewController, animated: true)
        }
    
    }