2017-07-14 5 views
1

現在、セルにUICollectionViewというテーブルがあります。独自のビューコントローラを持つように作成された各セルを許可しようとしています。たとえば、UICollectionViewCellをタップすると、その特定のセルのビューコントローラが表示されます。私は1つのviewcontrollerを作成して、その1つのView Controllerだけにsegueを実行できることを知っています。それは1つのセルのみをカバーします...ユーザーが25個のセルを作成した場合...どのようにセグを作成せずに各セルのビューコントローラーを作成できますか?以下のコードは、セルを作成することです。あなたの質問の下のコメントでUICollectionViewCellで新しいビューコントローラを作成しました。

// MARK: Create collection View cell with title, image, and rounded border 

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! ChatCell 
    let object = objects[indexPath.row] 

    cell.chatLabel.text = object.title ?? "" 
    cell.chatImage.image = object.image 
    if let chatImagePath = object.imagePath { 
     if let imageURL = URL(string: chatImagePath) { 
     cell.chatImage.sd_setImage(with: imageURL) 
     } 
    } 
    cell.layer.borderWidth = 0.5 
    cell.layer.borderColor = UIColor.darkGray.cgColor 
    cell.layer.masksToBounds = true 
    cell.layer.cornerRadius = 8 

    return cell 
} 

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return objects.count 
} 

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
    let itemWidth = photoCollectionView.bounds.width 
    let itemHeight = photoCollectionView.bounds.height/2 
    return CGSize(width: itemWidth, height: itemHeight) 
} 
+1

しかし、これらのデスティネーションビューコントローラにはまったく異なるデザインが25個ありますか?または、異なる基本データを表示するのと同じ基本的なタイプのView Controllerですか? – Rob

+0

@Robそのセル用にビューコントローラを作成したい...すべてのセルが同じビューコントローラを参照することはできません –

+0

@Robはいそれらはすべて同じレイアウトですが、それぞれ異なるデータを投稿したい –

答えて

1

、あなたは本当に唯一あなたがに移行しているビューコントローラの一つの基本タイプを持っていることが明らかになっていますが、上のそれに正しい情報を提供することを確認しますあなたがタップしたコレクションビューのどのセルを基準にしていますか。

  1. が簡単な、IBで、ストーリーボードで次のシーンへのコレクションビューセルからセグエを作成し、あなた何を渡すために、元のシーンでprepare(for:sender:)を実装:

    は、2つの基本的なアプローチがありますその次のシーンが必要です。

    たとえば、あなたが何かしprepare(for:sender:)ている可能性があります:今

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
        if let indexPath = collectionView?.indexPathsForSelectedItems?.first, let destination = segue.destination as? DetailsViewController { 
         destination.object = objects[indexPath.item] 
        } 
    } 
    

    を、これは私のコレクションビューは、私の先のビューコントローラであることを、配列、objectsを持っている仮定のトン(例を作りますDetailsViewController、それはいくつかのobjectプロパティなどを持っていますが)うまくいけば、それは基本的な考え方を示しています。

  2. あなたはセグを使用したくないと言った。私はなぜ、しかし、あなたが本当にsegueをしたくない場合は、collectionView(_:didSelectItemAt:)の実装を使用して、プログラム的にトランジションを開始します。

+0

私は何をしたいのですか...セルをクリックして特定のセルのtableviewcontrollerを表示するセグを作成しようとしています... –

+0

私のgithubプロジェクトを見たいですか? –

+0

確かに、それほど毛がかっていなければ。無関係なコードがたくさんある場合は、それを[最小で完全な再現可能な例]に減らしたいかもしれません(http://stackoverflow.com/help/mcve)。 – Rob

関連する問題