2017-01-06 25 views
5

'un içinde UICollectionView üzerinde zorlama Bir Tableview, birden fazla TableViewCells ve her bir TableViewCell'de birden çok UICollectionViewItems içeren bir UICollectionView olan bir viewController sahibim. Her collectionView öğesinin bir etiketi ve görüntü görünümü vardır. Çalışmak için 3d dokunuş almaya çalışıyorum, kullanıcı ve peek ve tabloyu önizleme ve bir görünüm denetleyicisi içine pop-up yapabilmek için koleksiyon görünümü içermeyen tablo cehennemde dokunmadan peek ve pop pop collectionView içindeki resimlerden biri ile aynı şey ama önizleme ve farklı bir görünüm denetleyicisi içine açılır. İlk senaryoyu iyi çalışıyorum, masaya dokunmaya ve "göz atmaya" başladığında tablo cehennemde kalmaya devam ediyor. Koleksiyon görünümünde çalışmaya başlamak için sıkıştım, ne yaptığımın bir önemi yok, ilk tablo satırında hangi resim satırına basmaya devam etmektense, sadece bir resim görünümü çerçevesi keskin kalıyor. Aşağıdaki kodu: Ben koleksiyon görünümü öğesi görüntü görünümünün rect almak gerekir ama tablo hücresinde olduğundan bu nasıl erişebileceğini gibiUITableViewCell

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 
} 

görünüyor? Herhangi bir işaretçi için şimdiden teşekkür ederiz.

+0

olmak ? – Rikh

+0

@Rikh my cvFrame değeri, hangi collectionView hücresine dokunursanız olun ve hangi satırda olduğuna bakmaksızın aynıdır: cvFrame: (0.0, 0.0, 60.0, 60.0). 60x60, viewView hücresindeki imageView boyutudur ve 0,0 değerinde, ekranın sol üst kısmı açık kalır. Boyutu doğru alıyorum, sadece tableviewCell içinde collectionView hücresinin x, y değerini almanız gerekir (eğer bu mantıklıysa). – HH887

cevap

5

Bunun için çözümün, UITableView ile aynı olduğunu düşünüyorum. registerForPreviewingWithDelegate yöntemini kullanarak önizleme için her bir hücreyi kaydetmeniz gerekir. cellForRow yönteminde kaydettirmeniz gerekir.

Bu sizin için çok yararlı olacaktır. Özellikle The Solution Paragraf: Eğer `UITableView` son satırda toplama görünümü için bu eylemi gerçekleştirmek zaman * cvFrame * değeri çıkıp neyi


            How to Peek & Pop A Specific View Inside a UITableViewCell