在 tableview 中执行 segue 集合视图
Posted
技术标签:
【中文标题】在 tableview 中执行 segue 集合视图【英文标题】:perform segue collection view inside a tableview 【发布时间】:2019-09-30 07:57:17 【问题描述】:我有嵌入到 UITableView 中的 UICollectionview。 现在我想在用户单击单元格时对新的 ViewController 执行 segue
导入 UIKit
类 productsTableViewCell: UITableViewCell,UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout
var imgArr = [
UIImage(named: "1000008614"),
UIImage(named: "1000008621"),
UIImage(named: "1000008629")
]
var imgName = [
"iPhone XS",
"iPhone XS Max",
"iPhone 11"
]
var imgPrice = [
"15,000,000 T",
"17,000,000 T",
"21,000,000 T"
]
@IBOutlet weak var btnShowAll: UIButton!
@IBOutlet weak var lblSectionName: UILabel!
@IBOutlet weak var ProductsCollectionVIew: UICollectionView!
override func awakeFromNib()
super.awakeFromNib()
ProductsCollectionVIew.delegate = self
ProductsCollectionVIew.dataSource = self
ProductsCollectionVIew.reloadData()
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
return imgArr.count
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Products", for: indexPath) as! ProductCollectionViewCell
cell.imgProduct.image = imgArr[indexPath.row]
cell.lblProductName.text = imgName[indexPath.row]
cell.lblPrice.text = imgPrice[indexPath.row]
return cell
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat
return 0.0
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat
return 0.0
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets
return UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
//here I can't use self.performSegue(withIdentifier: "identifier", sender: self)
@IBAction func btnShowAllAction(_ sender: Any)
我无法对新的视图控制器执行 segue 请帮我。 谢谢
【问题讨论】:
“我无法执行segue”是什么意思?是否有任何错误信息或什么?你能提供一些示例项目,即在 github 上吗? 在 didSelectitemAt 函数中,当我使用 performSegue(withIdentifier: "identifier", sender: self) 时,它说“使用未解析的标识符 'performSegue'” 你给segue identifire了吗?? 【参考方案1】:您不能在UITableViewCell
子类中使用performSegue()
,因为此方法仅在UIViewController
s 中可用。
您的问题有一个简单的解决方案 - 您可以将“回调”添加到单元格并在视图控制器中填写此回调。
你的手机:
class ProductsTableViewCell: UITableViewCell
var didSelectItemAction: ((IndexPath) -> Void)?
//...
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
didSelectItemAction?(indexPath)
视图控制器中的代码:
class ViewController: UITableViewController
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "identifier", for: indexPath)
guard let productsCell = cell as? ProductsTableViewCell else
return cell
productsCell.didSelectItemAction = [weak self] indexPath in
self?.performSegue(withIdentifier: "yourID", sender: self)
return productsCell
【讨论】:
【参考方案2】:如果您收到上述代码的警告,您可以简单地这样做:
let Tablecell = MyTableview.dequeueReusableCell(withIdentifier: MyCellID, for: indexPath) as! MyTableViewCell
Tablecell.configureCell() // this is function which setups my collection view
let collectionCell = Tablecell
collectionCell.didSelectItemAction = [weak self] indexPath in
self?.performSegue(withIdentifier: "SegueID", sender: self)
return collectionCell
【讨论】:
以上是关于在 tableview 中执行 segue 集合视图的主要内容,如果未能解决你的问题,请参考以下文章
通过 tableview 中的按钮进行 segue 执行 2 个 segue 而不是一个
以编程方式选择 tableview 上的单元格不会执行关联的 segue
单击TableView部分中的任意位置后如何执行segue?
在 tableviewcell 中使用 UITableview 执行 segue
使用动态tableView的tableViewCell中的动态collectionViewCell执行Segue With Identifier,swift