UITableViewのテキストと画像のセルが選択された時のSegueを使った画面遷移をSwiftで簡単に説明します。
 
以下はいずれかのCell を選択するとそのCellの画像が画面に表示される例です
 

UITableView と Segue
UITableViewでプロジェクトが出来上がった前提で始めます。こちらを参照してください。
 
画面遷移先の View Controller を新しく作成
この作業をする前にView Controller の概要を表示してくれる「Minimap」が煩わしいので消しておきます
「Editor」から「MiniMap」のチェックを外すと消えます

Mainを選択し、ライブラリーボタン からView Controllerを選択 、スクリーンに置きます。
 

 
この View Controller に対応するClass を新たに作成します。
メニューの「File」「New」「File…」

「iOS」-> 「Swift File」 を選択

名前を SubViewController.swift (例) として
プロジェクト内に「create」する
Where、Group、Targets はそれぞれのプロジェクト名

 
swift ファイルはほとんど空の状態ですので、最低限のクラスとしての記述をします。
 
SubViewController.swift
| 1 2 3 4 5 6 7 8 9 | import Foundation import UIKit class SubViewController: UIViewController{     override func viewDidLoad() {         super.viewDidLoad()     } } | 
 
新しく作った View Controller で、
- バーにあるアイコン View Controller を選択
- 「Show the Identity Inspector」タグ
- 「Custom Class」の「Class」
先ほど作成したSubViewControllerが候補に入っています。
 
SubViewControllerを選択
 

 
これで、StoryBoard の Sub View Controller Scene と
SubViewController.swift が結び付けられました。
ストーリーボードで Segue を設定
UITableView が設定されている View Controller Scene と
Sub View Controller Scene を segue で結びます。基本的なSegueについてはこちらを参考にしてください。
 
設定の手順としては、
- View Controller Scene の上部バーにあるアイコンを右クリック
- manual の+をつかんでSub View Controller Sceneに持っていく
- Sub View Controller Scene から選択肢が出るので「Present Modally」を選択
  
 
成功すれば2つのViewがつながり矢印 Segue ができます
 

 
この Segue の上にできたアイコンをクリックして
ライブラリエリアにある Attributes Inspector を選択
 

 
identifierに「toSubViewController」と記述。このキーワードは画面遷移で使われます
セルが選択されて遷移する画面を作成
Sub View Controller Scene のViewに Image View を置きます
 

 
 
以前に Swift で作ったUITable Viewを元に、セルが選択されSegue を使って遷移する部分がこうなります。
 
ViewController.swift
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |   var selectedImage: UIImage?   ... // Cell が選択された場合 func tableView(_ table: UITableView,didSelectRowAt indexPath: IndexPath) {     // [indexPath.row] から画像名を探し、UImage を設定     selectedImage = UIImage(named: imgArray[indexPath.row] as! String)     if selectedImage != nil {         // SubViewController へ遷移するために Segue を呼び出す         performSegue(withIdentifier: "toSubViewController",sender: nil)     } } // Segue 準備 override func prepare(for segue: UIStoryboardSegue, sender: Any!) {     if (segue.identifier == "toSubViewController") {         let subVC: SubViewController = (segue.destination as? SubViewController)!         // SubViewController のselectedImgに選択された画像を設定する         subVC.selectedImg = selectedImage     } } | 
 
まとめて、ViewControllerはこのようになります。
ViewController
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | import UIKit class ViewController: UIViewController ,     UITableViewDataSource, UITableViewDelegate{     @IBOutlet var table:UITableView!     var selectedImage: UIImage?     // section毎の画像配列     let imgArray: NSArray = [         "img0","img1",         "img2","img3",         "img4","img5",         "img6","img7"]     let label2Array: NSArray = [         "2013/8/23/16:04","2013/8/23/16:15",         "2013/8/23/16:47","2013/8/23/17:10",         "2013/8/23/17:15","2013/8/23/17:21",         "2013/8/23/17:33","2013/8/23/17:41"]     override func viewDidLoad() {         super.viewDidLoad()     }     //Table Viewのセルの数を指定     func tableView(_ table: UITableView,                    numberOfRowsInSection section: Int) -> Int {         return imgArray.count     }     //各セルの要素を設定する     func tableView(_ table: UITableView,                    cellForRowAt indexPath: IndexPath) -> UITableViewCell {         // tableCell の ID で UITableViewCell のインスタンスを生成         let cell = table.dequeueReusableCell(withIdentifier: "tableCell",                                              for: indexPath)         let img = UIImage(named: imgArray[indexPath.row] as! String)         // Tag番号 1 で UIImageView インスタンスの生成         let imageView = cell.viewWithTag(1) as! UIImageView         imageView.image = img         // Tag番号 2 で UILabel インスタンスの生成         let label1 = cell.viewWithTag(2) as! UILabel         label1.text = "No."+String(indexPath.row + 1)         // Tag番号 3 で UILabel インスタンスの生成         let label2 = cell.viewWithTag(3) as! UILabel         label2.text = String(describing: label2Array[indexPath.row])         return cell     }     func tableView(_ table: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {         return 120.0     }     // Cell が選択された場合     func tableView(_ table: UITableView,didSelectRowAt indexPath: IndexPath) {         // [indexPath.row] から画像名を探し、UImage を設定         selectedImage = UIImage(named: imgArray[indexPath.row] as! String)         if selectedImage != nil {             // SubViewController へ遷移するために Segue を呼び出す             performSegue(withIdentifier: "toSubViewController",sender: nil)         }     }     // Segue 準備     override func prepare(for segue: UIStoryboardSegue, sender: Any!) {         if (segue.identifier == "toSubViewController") {             let subVC: SubViewController = (segue.destination as? SubViewController)!             // SubViewController のselectedImgに選択された画像を設定する             subVC.selectedImg = selectedImage         }     } } | 
 
遷移先で画像を表示できるように設定します。
SubViewController
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import Foundation import UIKit class SubViewController: UIViewController{     @IBOutlet var imageView: UIImageView!     var selectedImg: UIImage!     override func viewDidLoad() {         super.viewDidLoad()         imageView.image = selectedImg         // 画像のアスペクト比を維持しUIImageViewサイズに収まるように表示         imageView.contentMode = UIView.ContentMode.scaleAspectFit     } } | 
 
SubViewController を右クリックして New reference Outlet とSub View Controller Scene の imageView を紐付けします。
 
これで、ビルド実行
No.4のセルを選択するとアスペクト比を維持して画面横幅に合わせて画像が表示されます。
関連ページ:
- Storyboard で作成
- セル選択で画面遷移
- Table View Section の設定
References:
UITableView – UIKit | Apple Developer Documentation
UITableViewCell – UIKit | Apple Developer Documentation

