質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

3530閲覧

cellによって遷移先を変える方法

退会済みユーザー

退会済みユーザー

総合スコア0

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2016/08/07 14:24

ただいま下記のプログラムを用いてcollectionviewを作ったのですが(ほとんどサイトの引用)セルそれぞれの遷移先を指定するのに困っています。
いろいろ調べた結果
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {}
を用いることで選択したセルの番号を読み取り、switch文でその数値ごとの遷移先をコードで表すのかな、と考えていますがうまくいきません。
教えていただけると助かります。

import UIKit class ViewController: UIViewController ,UICollectionViewDataSource, UICollectionViewDelegate , UICollectionViewDelegateFlowLayout { let photos:Array<String> = ["1", "2","3","4","5","6","7","8","9","10"] override func viewDidLoad() { super.viewDidLoad() } func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell{ // Cell はストーリーボードで設定したセルのID let testCell:UICollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) // Tag番号を使ってImageViewのインスタンス生成 let imageView = testCell.contentView.viewWithTag(1) as! UIImageView // 画像配列の番号で指定された要素の名前の画像をUIImageとする let cellImage = UIImage(named: "abc.png") // UIImageをUIImageViewのimageとして設定 imageView.image = cellImage // Tag番号を使ってLabelのインスタンス生成 let label = testCell.contentView.viewWithTag(2) as! UILabel label.text = photos[indexPath.row] return testCell } func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int { return 1 } func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { // 要素数を入れる、要素以上の数字を入れると表示でエラーとなる return 10; } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

前提としてStoryboardSegueを結びSegue Identifierを設定している必要があります。
そこまで準備ができていたら以下の方法で画面遷移ができると思います。

swift

1func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 2 3 if indexPath.row == 0 { 4 performSegueWithIdentifier("vc1", sender: nil) 5 } else if indexPath.row == 1 { 6 performSegueWithIdentifier("vc2", sender: nil) 7 } 8}

後は汎用的な詳細画面に情報を渡して表示する場合は以下の様になると思います。

swift

1func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 2 3 performSegueWithIdentifier("detail", sender: photos[indexPath.row]) 4} 5 6override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 7 8 if let detail = segue.destinationViewController as? DetailViewController { 9 detail.detailLabelString = sender as? String 10 } 11}

回答を踏まえてvc1vc2はModai表示でそれ以外は汎用のDetailViewControllerにしてみました、以下からダウンロードして試してみてください。

teratail_43621 サンプル

func collectionView(collectionView: UICollectionView, didSelectItem・・・というのはセルをタッチした時のプログラムですよね? 教えてもらったプログラムの中身をprintに変えてみてセルを押してもprintが実行されなかったのは自分のsegueの設定に問題があるのではなくプログラミング自体になにか問題があるのでしょうか。

こちらはcollectionViewdelegateselfに設定していないからだと思われます。

投稿2016/08/07 15:04

編集2016/08/08 23:41
_Kentarou

総合スコア8490

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/08/08 16:07

すいません。うまくいかないので追加で質問させていただきます。 自分なりにstoryboardでsegueで繋ぎIdentifierにvc1,vc2を追加して試してみたのですがうまく遷移しませんでした。 func collectionView(collectionView: UICollectionView, didSelectItem・・・というのはセルをタッチした時のプログラムですよね? 教えてもらったプログラムの中身をprintに変えてみてセルを押してもprintが実行されなかったのは自分のsegueの設定に問題があるのではなくプログラミング自体になにか問題があるのでしょうか。 ちなみにsegueはcollectionviewのあるviewcontrollerをセルを押して遷移したいviewcontrollerを繋ぎidentifierにはvc1,vc2,kindはpresent modallyにしました。 segueはviewcontrollerから二股に分かれた矢印が出ている状態です。
_Kentarou

2016/08/08 23:37

回答に参考用にサンプルURLを載せました、ダウンロードして試してみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問