UITableViewCell 类中的 PerfomSegue
Posted
技术标签:
【中文标题】UITableViewCell 类中的 PerfomSegue【英文标题】:PerfomSegue's in UITableViewCell Class 【发布时间】:2016-09-07 12:01:34 【问题描述】:我有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)
【问题讨论】:
【参考方案1】:创建一个协议,然后在TableViewCell
中创建它的实例并在UserLibraryViewController
中实现协议,然后在CollectionView
的didSelectItemAtIndexPath
中使用该委托实例调用这样的方法。
protocol CustomCollectionDelegate
func selectedCollectionCell(indexPath: NSIndexPath)
class UserLibraryTableViewCell: UITableViewCell
@IBOutlet weak var collectionView: UICollectionView!
var tableIndexPath: NSIndexPath?
var delegate: CustomCollectionDelegate?
现在在 didSelectItemAtIndexPath
或 CollectionView
中调用此方法。
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath)
print("\(self.tableIndexPath!.section) ---- \(indexPath.item) \(tableSectionHeader[self.tableIndexPath!.section]) ")
self.delegate?.selectedCollectionCell(indexPath)
现在像这样在UserLibraryViewController
中实现此协议,并在cellForRowAtIndexPath
中设置委托。
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
作为参数的协议方法,您可以使用自定义对象或Dictionary/Array
进行更改。
【讨论】:
没有醒来。分机没有被调用。尝试设置断点。 对不起,我忘了用self设置委托,检查cellForRowAtIndexPath
的编辑答案。
非常感谢。它现在按照我的要求工作。 :)
嗨@NSDoc,我在传递不同的 numberOfItemsInSection 时遇到了麻烦。我通常知道如何在这里传递不同的 numberOfItemsInSection ?对于所有部分,相同的项目计数被传递而不是不同。
请添加带有新代码的新帖子,以及您创建的协议以及您遇到问题的地方。您在右表中有多个部分。那么在表格部分面临问题吗?以上是关于UITableViewCell 类中的 PerfomSegue的主要内容,如果未能解决你的问题,请参考以下文章
点击 UITableViewCell 类中的 UIImageView 时如何打开新屏幕?
从UITableViewCell类中获取UITextView中的hashtag后尝试进行segue
自定义 uitableviewcell 中的 Uibuttons
无法在连接的自定义 UITableViewCell 类中制作插座
确定 UITableViewCell 中的 UIButton
当 UITextField 获得焦点时,从 UITableViewCell 继承类中更改 UITableViewCell 的高度