gpt4 book ai didi

ios - UITableViewCell 类中的 PerfomSegue

转载 作者:搜寻专家 更新时间:2023-11-01 07:20:30 24 4
gpt4 key购买 nike

我有 TableView,在 TableViewCell 中我添加了 UICollectionView。现在,当用户点击任何 UICollectionView 时,我想将数据传递给下一个 viewController 但不幸的是,我无法在我选择项目的 UITableViewCell 类中使用执行 segue。有什么方法可以在这里执行 segue 吗?

完整代码

class UserLibraryViewController: UIViewController {

extension UserLibraryViewController : UITableViewDelegate { }

extension UserLibraryViewController : UITableViewDataSource {

func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return myBooksGenre[section]
}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return myBooksGenre.count
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("userBooksTableViewCell") as! UserLibraryTableViewCell
cell.tableIndexPath = indexPath

return cell
}
}

TableViewCell

class UserLibraryTableViewCell: UITableViewCell {
@IBOutlet weak var collectionView: UICollectionView!
var tableIndexPath: NSIndexPath?

}

extension UserLibraryTableViewCell : UICollectionViewDataSource {

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

return 12
}

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("userBooksCollectionViewCell", forIndexPath: indexPath) as! UserLibraryCollectionViewCell



return cell
}

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {

print("\(self.tableIndexPath!.section) ---- \(indexPath.item) \(tableSectionHeader[self.tableIndexPath!.section]) ")


}
}

extension UserLibraryTableViewCell : UICollectionViewDelegateFlowLayout {

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
let itemsPerRow:CGFloat = 4
let hardCodedPadding:CGFloat = 5
let itemWidth = (collectionView.bounds.width / itemsPerRow) - hardCodedPadding
let itemHeight = collectionView.bounds.height - (2 * hardCodedPadding)
return CGSize(width: itemWidth, height: itemHeight)
}

}

最佳答案

创建一个协议(protocol),然后在 TableViewCell 中创建它的实例并在 UserLibraryViewController 中实现该协议(protocol),然后在 didSelectItemAtIndexPath 中实现 CollectionView 使用该委托(delegate)实例来调用这样的方法。

protocol CustomCollectionDelegate {
func selectedCollectionCell(indexPath: NSIndexPath)
}

class UserLibraryTableViewCell: UITableViewCell {
@IBOutlet weak var collectionView: UICollectionView!
var tableIndexPath: NSIndexPath?
var delegate: CustomCollectionDelegate?
}

现在在 CollectionViewdidSelectItemAtIndexPath 中调用此方法。

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {

print("\(self.tableIndexPath!.section) ---- \(indexPath.item) \(tableSectionHeader[self.tableIndexPath!.section]) ")
self.delegate?.selectedCollectionCell(indexPath)
}

现在像这样在 UserLibraryViewController 中实现此协议(protocol),并在 cellForRowAtIndexPath 中设置委托(delegate)。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("userBooksTableViewCell") as! UserLibraryTableViewCell
cell.tableIndexPath = indexPath
cell.delegate = self
return cell
}

extension UserLibraryViewController : CustomCollectionDelegate {
func selectedCollectionCell(indexPath: NSIndexPath) {
self.performSegueWithIdentifier("Identifier", sender: indexPath)
}
}

注意:我添加了以 NSIndexPath 作为参数的协议(protocol)方法,您可以使用自定义对象或 Dictionary/Array 更改它。

关于ios - UITableViewCell 类中的 PerfomSegue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39369420/

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