如何从嵌套的 collectionView 单元格开始?
How do I segue from a nested collectionView cell?
我有一个 collectionView
用于在页面之间滚动,在其中一个整页单元格中我有另一个 collectionView
单元格。当最里面的 collectionView 中的一个单元格被点击时,我如何执行 segue。
当您点击 collectionView 中的一个项目时,将调用以下委托方法(如果您正确连接了所有内容)func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
...注意第一个参数是 collectionView 本身。
取决于您如何设置...
如果你在一个 UIViewController 中有两个 collectionView,那么你可以这样做..
func collectionView(_ collectionView: UICollectionView,
didSelectItemAt indexPath: IndexPath) {
if collectionView == self.innerCollectionView {
// performSegue...
}
}
如果你有两个视图控制器,一个用于外部,另一个用于内部..那么你可以创建使用委托模式让外部知道哪个项目被选中,并使用该信息进行 segue。
您将需要对具有集合视图的单元格进行委托,在选择特定单元格时需要通知该委托:
protocol CollectionCellDelegate: class {
func selectedItem()
}
class CollectionCell: UITableViewCell {
weak var delegate: CollectionCellDelegate?
// ...
func collectionView(_ collectionView: UICollectionView,
didSelectItemAt indexPath: IndexPath) {
self.delegate?.selectedItem()
}
}
并且在 TableViewController
中,您将必须实现该委托以从中执行 segue(您必须从 UIViewController
子类执行 segue,但 UITableViewCell
并未对其进行子类化,这就是为什么你需要委托模式)。
class TableViewController: UITableViewController, CollectionCellDelegate {
// ...
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CollectionCell", for: indexPath) as! CollectionCell
// set its delegate to self
cell.delegate = self
return cell
}
func selectedItem() {
// here you can perform segue
performSegue(withIdentifier: "mySegue", sender: self)
}
}
我没有向委托传递任何参数,但您当然可以使用参数来传递转场所需的任何信息(例如,所选集合单元格的 ID 等)。
我有一个 collectionView
用于在页面之间滚动,在其中一个整页单元格中我有另一个 collectionView
单元格。当最里面的 collectionView 中的一个单元格被点击时,我如何执行 segue。
当您点击 collectionView 中的一个项目时,将调用以下委托方法(如果您正确连接了所有内容)func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
...注意第一个参数是 collectionView 本身。
取决于您如何设置...
如果你在一个 UIViewController 中有两个 collectionView,那么你可以这样做..
func collectionView(_ collectionView: UICollectionView,
didSelectItemAt indexPath: IndexPath) {
if collectionView == self.innerCollectionView {
// performSegue...
}
}
如果你有两个视图控制器,一个用于外部,另一个用于内部..那么你可以创建使用委托模式让外部知道哪个项目被选中,并使用该信息进行 segue。
您将需要对具有集合视图的单元格进行委托,在选择特定单元格时需要通知该委托:
protocol CollectionCellDelegate: class {
func selectedItem()
}
class CollectionCell: UITableViewCell {
weak var delegate: CollectionCellDelegate?
// ...
func collectionView(_ collectionView: UICollectionView,
didSelectItemAt indexPath: IndexPath) {
self.delegate?.selectedItem()
}
}
并且在 TableViewController
中,您将必须实现该委托以从中执行 segue(您必须从 UIViewController
子类执行 segue,但 UITableViewCell
并未对其进行子类化,这就是为什么你需要委托模式)。
class TableViewController: UITableViewController, CollectionCellDelegate {
// ...
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CollectionCell", for: indexPath) as! CollectionCell
// set its delegate to self
cell.delegate = self
return cell
}
func selectedItem() {
// here you can perform segue
performSegue(withIdentifier: "mySegue", sender: self)
}
}
我没有向委托传递任何参数,但您当然可以使用参数来传递转场所需的任何信息(例如,所选集合单元格的 ID 等)。