我有以下设置:带有菜单标题和菜单项的集合视图,当我选择菜单项时,它应该更新视图右侧的内容。在视图的右侧,我有一个标签和一个分段控件。
当我选择一个项目时,它应该更新容器视图(它们有一个带有嵌入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中的两个控制器中设置数据?
答案 0 :(得分:0)
您可以将segue移至ServiceOverViewController
,然后移至_, didSelectItemAt:
方法:
从当前故事板
ServiceOverViewController
将项目分配给此控制器:controller.setupViewWithService(service: item)
代码看起来像这样:
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)
}
}