post Image
[Swift]segueを使った画面遷移、segueを使わない画面遷移

1. segue を使った画面遷移

Storyboard でViewControllerを選択してDetailViewControllerとconnectする
identifier を設定(ここでは ”move to detail” )する。

その後、遷移させたいところで以下を記述

self?.performSegue(withIdentifier: "move to detail", sender: image)

画面遷移先に何かしらを受け渡したい場合(今回はcollectionViewのimage)は sender にセットし、以下のように記述。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let image = sender as? UIImage {
        if let vc = segue.destination as? DetailViewController {
            vc.detail = image
        }
    }
 }

2. segue を使わない画面遷移

流れ

  1. 遷移先のVCがあるstoryboadをインスタンス化
  2. 遷移先のVCをインスタンス化
  3. 遷移先のVCに遷移する

異なるstoryboad上に配置したVCへの遷移

Show the Attributes inspector -> View Controller -> Is Initial View Controller
にチェックマークを付ける

これでDetailViewControllerがInitial View Controllerになった

その後、遷移させたいところで以下を記述

transition.swift
let sb = UIStoryboard(name: "Detail", bundle: nil)
let vc = sb.instantiateInitialViewController("detail") as! DetailViewController
 vc.detail = image

// navigationControllerを残してpushで遷移
self?.navigationController?.pushViewController(vc, animated: true)

// modal presentを使って画面ごと遷移
vc.modalTransitionStyle = .flipHorizontal      // オプション
self?.present(vc, animated: true, completion: nil)

最終的には

VC.swift
 // タップした時(画像を選択した時)の記述
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        let asset: PHAsset = self.photos[indexPath.item]
        let width = collectionView.bounds.size.width * 2
        let height = collectionView.bounds.size.height * 2

        let option = PHImageRequestOptions()
        option.deliveryMode = .highQualityFormat

        manager.requestImage(for: asset,
                             targetSize: CGSize(width: width, height: height),
                             contentMode: .default,
                             options: option,
                             resultHandler: {[weak self] result, info in
                                if let image = result {

                                    // ココの箇所
                                    let sb = UIStoryboard(name: "Detail", bundle: nil)
                                    let vc = sb.instantiateInitialViewController() as! DetailViewController              //ViewController が Detail.storyboard の Initial View Controller に設定されていれば、コントローラ名の明記は不要。
                                    vc.detail = image
                                    self?.navigationController?.pushViewController(vc, animated: true)

                                    //modal;
//                                    vc.modalTransitionStyle = .flipHorizontal
//                                    self?.present(vc, animated: true, completion: nil)


                                }
        })
    }
DetailViewController.swift
@IBOutlet weak var imageView: UIImageView!
var detail: UIImage!

override func viewDidLoad() {
        super.viewDidLoad()

        imageView.image = detail
        imageView.contentMode = UIViewContentMode.scaleAspectFit
    }

前の画面に戻る方法

前の画面に戻る.swift
self.dismissViewControllerAnimated(true, completion: nil)

『 Swift 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。