强制触摸 UITableViewCell 内的 UICollectionView
Posted
技术标签:
【中文标题】强制触摸 UITableViewCell 内的 UICollectionView【英文标题】:Force touch on UICollectionView inside of UITableViewCell 【发布时间】:2017-01-06 04:30:05 【问题描述】:我有一个带有 Tableview、多个 TableViewCells 的 viewController,并且在每个 TableViewCell 中,有一个带有多个 UICollectionViewItems 的 UICollectionView。每个 collectionView 项都有一个标签和图像视图。我正在尝试让 3d touch 工作,以便用户通过强制触摸 tableCell 的不包含集合视图的区域来查看和弹出,预览并弹出到一个视图控制器中,然后能够执行与 collectionView 中的一张图像相同,但预览并弹出到不同的视图控制器。我的第一个场景工作正常,当开始强制触摸和“窥视”时,tableCell 在屏幕上保持清晰。我坚持让它在集合视图中工作,无论我做什么,只有一个图像视图框架在第一个 tableview 行上保持清晰,无论我实际按下哪一行。代码如下:
func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController?
//get the tableviewCell
if let tableCellPath = tableView.indexPathForRow(at: location)
print("tableCellPath=", tableCellPath)
if let tableCell = tableView.cellForRow(at: tableCellPath) as? VenueMainTableViewCell
//user tapped on a beer in the collectionview
if let collectionView = tableCell.collectionView
let collectionPoint = collectionView.convert(location, from: tableView)
if let cvPath = collectionView.indexPathForItem(at: collectionPoint)
let collectionViewCell = collectionView.cellForItem(at: cvPath) as? VenueMainCollectionViewCell
let cvFrame = collectionViewCell?.itemLabelImageView.frame
let bc = storyboard?.instantiateViewController(withIdentifier: "itemDetail") as! ItemDetailViewController
let ven = UTcheckin.sharedInstance.Venues[collectionView.tag]
let selectedItem = ven.ItemsAtVenue[(collectionViewCell?.tag)!]
bc.item = selectedItem
previewingContext.sourceRect = cvFrame!
return bc
if let tablePath = tableView.indexPathForRow(at: location)
//user tapping on a venue, this works
previewingContext.sourceRect = tableView.rectForRow(at: tablePath)
let vc = storyboard?.instantiateViewController(withIdentifier: "venueDetail") as! VenueDetailViewController
vc.venue = UTcheckin.sharedInstance.Venues[tablePath.row]
return vc
return nil
return nil
似乎我需要获取集合视图项目图像视图的矩形,但由于它位于表格单元格中,我该如何访问它?在此先感谢您的任何指点。
【问题讨论】:
当您对UITableView
的最后一行中的集合视图执行此操作时,您的 cvFrame 值是多少?
@Rikh 我的 cvFrame 值是相同的,无论我点击哪个 collectionView 单元格,也不管它位于哪一行:cvFrame: (0.0, 0.0, 60.0, 60.0)。 60x60 是 collectionView 单元格中 imageView 的大小,在 0,0 处,保持清晰的框是屏幕的左上角。我的尺寸正确,只需要在 tableviewCell 中获取 collectionView 单元格的 x、y 值(如果有意义的话)。
【参考方案1】:
我认为解决方案与UITableView
相同。您必须使用registerForPreviewingWithDelegate
方法注册每个单元格以进行预览。你应该注册它
cellForRow
方法。
这应该对你很有帮助。特别是The Solution
段:
How to Peek & Pop A Specific View Inside a UITableViewCell
【讨论】:
以上是关于强制触摸 UITableViewCell 内的 UICollectionView的主要内容,如果未能解决你的问题,请参考以下文章
将 UITapGestureRecognizer 触摸传递到底层 UITableViewCell
UITableViewCell 内的 UIButton 没有收到点击?
将 UITableViewCell 内的 UITextField 保存到 NSMutableArray