【发布时间】:2016-11-16 12:31:26
【问题描述】:
我正在使用拆分视图组件开发场景。在我的主视图中,我在容器内有一个表格视图,在我的详细视图中,我在容器内有一个集合视图。
我正在尝试在“详细视图的集合视图容器”中选择所有单元格并在“主视图表视图”中列出,但我不知道如何从这些信息中获取访问权限。在详细视图中,我知道我可以使用“collectionView.indexPathsForSelectedItems()”选择单元格,但是如何在每次详细选择单元格时在视图外部访问此信息并在主视图表上创建一个新的表格单元格查看集合视图?
编辑:
我正在阅读有关委派的内容,我编写了这些代码来尝试通过视图共享数据,但它不起作用:
1) 我写了这个委托协议:
protocol MasterDetailShareDataDelegate: class {
func reloadMasterViewWithSelectedCells(_ data: Set<String>)
}
2) 我将委托变量放在原始视图上:
class ProductsPlatesViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
var platesSelected: Set<String> = Set()
var delegate: MasterDetailShareDataDelegate?
...
func passDataBackWards() {
let data = platesSelected
delegate?.reloadMasterViewWithSelectedCells(data)
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
var cell = collectionView.cellForItem(at: indexPath) as! ProductsPlatesCollectionViewCell
cell.backgroundColor = UIColor.green
platesSelected = Set()
for item in collectionView.indexPathsForSelectedItems! {
platesSelected.insert(self.plates[item.row])
}
passDataBackWards()
}
func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {
var cell = collectionView.cellForItem(at: indexPath) as! ProductsPlatesCollectionViewCell
cell.backgroundColor = UIColor.clear
platesSelected = Set()
for item in collectionView.indexPathsForSelectedItems! {
platesSelected.insert(self.plates[item.row])
}
passDataBackWards()
}
}
3)在命运视图上写了这段代码:
class NewBudgetViewController: UIViewController, MasterDetailShareDataDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let theProductsPlatesViewController = ProductsPlatesViewController()
theProductsPlatesViewController.delegate = self
...
}
func reloadMasterViewWithSelectedCells(_ data: Set<String>) {
print(data)
}
NewBudgetViewController 中的函数 reloadMasterViewWithSelectedCells 未被调用。有人可以告诉我为什么吗? :(
【问题讨论】:
-
将所有选定单元格的数据带到另一个视图并在那里创建相同的单元格。
-
是的。这正是我想做的。但是怎么做?如何从另一个视图实时访问信息(我的意思是,当用户从一个视图单击单元格时,另一个视图知道它并创建相同的单元格)?
-
你想要目标 C 还是 swift ?
-
Swift 优先。
-
怎么样!只需将所有选定的数据保存在一个数组中,然后将该数组传递给下一个类的数组(使其成为一个属性)。然后将该数组用作下一个类的数据源。
标签: ios swift uicollectionview