Tableview, 여러 TableViewCells 및 각 TableViewCell의 viewController, 여러 개의 UICollectionViewItem이있는 UICollectionView가 있습니다. 각 collectionView 항목에는 레이블 및 이미지보기가 있습니다. 나는 3D 터치를 작동 시켜서 사용자와 픽을보고 테이블의 영역을 터치하여 힘을내어 콜렉션 뷰가없는 셀을보고 미리보기하고 하나의 뷰 컨트롤러에 넣은 다음이를 수행 할 수있게하려고합니다. collectionView의 이미지 중 하나를 사용하여 동일한 작업을하지만 다른보기 컨트롤러를 미리보고 팝업합니다. 나는 첫번째 시나리오가 잘 작동하고, touch와 "peek"을 강제로 시작할 때 tableCell이 화면에 선명하게 남아 있습니다. 이 컬렉션 뷰에서 작동하도록 점점 붙어있어, 아무리 내가 이미지 뷰 프레임을 상관없이 첫 번째 tableview 행 날카로운 남아 실제로 관계없이 어떤 행을 누릅니다. 아래 코드 : I 컬렉션보기 항목 이미지보기의 RECT를 얻을 필요하지만 난 그게 테이블 셀에 있기 때문에이 액세스 할 수있는 방법을 같이UITableViewCell의 UICollectionView에 대한 강제 터치
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
}
보인다? 모든 포인터에 미리 감사드립니다.
가 될 ? – Rikh
@Rikh cvFrame : (0.0, 0.0, 60.0, 60.0)에있는 어떤 행에 관계없이 어떤 collectionView 셀에 상관없이 내 cvFrame 값은 동일합니다. 60x60은 collectionView 셀의 imageView 크기이고 0,0에서는 명확한 상태의 상자가 화면 왼쪽 상단에 있습니다. 나는 크기를 얻고 있는데, collectionview 셀의 x, y 값을 tableviewCell (필요한 경우)에서 가져와야합니다. – HH887