gpt4 book ai didi

ios - 从父 UICollectionViewCell 中的 UICollectionViewCell 的按钮继续

转载 作者:行者123 更新时间:2023-11-28 15:52:00 27 4
gpt4 key购买 nike

我将 UICollectionViewCell 与父 UICollectionViewCell 中的按钮一起使用:

protocol DayCellDelegate
{
func buttonTapped()
}

class SelectTimeViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {

@IBOutlet weak var collectionViewSlider: UICollectionView!

override func viewDidLoad() {
super.viewDidLoad()
collectionViewSlider?.register(DayCollectionViewCell.self, forCellWithReuseIdentifier: "cell")
collectionViewSlider.dataSource = self
collectionViewSlider.delegate = self
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 3
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! DayCollectionViewCell
cell.dayTitle.text = String(indexPath.row)
return cell
}
}

class DayCollectionViewCell: UICollectionViewCell, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout, DayCellDelegate {

func buttonTapped() {
print("button clicked")
}

override init(frame: CGRect) {
super.init(frame: frame)
setupDayTimeline(width: frame.width, height: frame.height)
}

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

func setupDayTimeline(width: CGFloat, height: CGFloat) {

let appsCollectionView: UICollectionView = {
let layout = UICollectionViewFlowLayout()
layout.itemSize = CGSize(width: 90, height: 45)
let collectionView = UICollectionView(frame: CGRect(x: 0, y: 30, width: width, height: height - 30), collectionViewLayout: layout)
return collectionView
}()
addSubview(appsCollectionView)

appsCollectionView.delegate = self
appsCollectionView.dataSource = self

appsCollectionView.register(UINib(nibName: "TimeCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "timecell")
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 3
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "timecell", for: indexPath) as! TimeCollectionViewCell
cell.btnTime.addTarget(self, action: #selector(timeSelected), for: .touchUpInside)
}
return cell
}

func timeSelected(){
//here I need perform segue for SelectTimeViewController
}
}

class TimeCollectionViewCell: UICollectionViewCell {

@IBOutlet weak var btnTime: UIButton!
var delegate : DayCellDelegate?

@IBAction func btnTimeClick(_ sender: Any) {
self.delegate?.buttonTapped()
}

override func awakeFromNib() {
super.awakeFromNib()
}

如何从 DayCollectionViewCell 执行 segue?我不能在 timeSelected() 中调用 self.performSegue(withIdentifier: "...", sender: info) 因为 UICollectionViewCell 不包含 performSegue

最佳答案

为包含您的 Collection View 的 Controller 创建一个协议(protocol),该协议(protocol)将定义“单元格委托(delegate)”,然后您可以在 Controller 上调用操作,即:

protocol DayCellDelegate
{
func buttonTapped(...)
}

您在 DayCellCollectionViewCell 或其父级中创建一个属性,您可以将其命名为委托(delegate)

var delegate : DayCellDelegate?

然后在 cellForItem 方法中,当您可以单元格时,将委托(delegate)设置为 Controller 并实现它:

cell.delegate = self

最后在您的单元格的点击操作中,调用:

self.delegate?.buttonTapped(...)

希望对您有所帮助,如果您需要更具体的指导,请告诉我。

关于ios - 从父 UICollectionViewCell 中的 UICollectionViewCell 的按钮继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42192054/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com