繁体   English   中英

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

[英]Pass data to controller in container view

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

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

现在我尝试了这个:

var selectedItem: String! var services: [String]!

override func viewDidLoad() {
    super.viewDidLoad()

    // Loaded collectionView and reloaded
    selectedItem = services[section].items[row]
}

然后,我使用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删除到ServiceOverViewController ,然后在_, didSelectItemAt:方法:

  1. 从当前故事板实例化ServiceOverViewController

  2. 将项目分配给此控制器: controller.setupViewWithService(service: item)

  3. 当前控制器。

代码将如下所示:

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)
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM