ホーム

UIViewの上に置いたUIButtonでPresentsViewControllerを呼び出す方法

 

環境

・Swift3
・Xcode8

ぬえええええ!!!!!!ウイベウフォw

スクリーンショット 2017-05-15 13.18.46.png

上記のようにUIViewの上にUIButtonを置いてみればPresentsViewControllerを呼び出せず画面遷移ができません。困り果てました、最悪です。

infoClick()関数を定義する

UIButtonのActionの中でinfoClick()関数を呼び出してみてください。画面遷移ができます!

func infoClick()  {

        let storyboard: UIStoryboard = UIStoryboard (name: "Main", bundle: nil)
        let vc: CampainDetailView = storyboard.instantiateViewControllerWithIdentifier("campainDetailView") as! CampainDetailView
        let currentController = self.getCurrentViewController()
        currentController?.presentViewController(vc, animated: false, completion: nil)

    }

この関数は、ルートビューコントローラーをクリエイトするぜ!

func getCurrentViewController() -> UIViewController? {

    if let rootController = UIApplication.sharedApplication().keyWindow?.rootViewController {
        var currentController: UIViewController! = rootController
        while( currentController.presentedViewController != nil ) {
            currentController = currentController.presentedViewController
        }
        return currentController
    }
    return nil

}

左右に遷移する

アプリっぽく左右に遷移させたければ下記のように書けばいいと思います。全ソースを載せておきます。

 @IBAction func SettingButton(_ sender: Any) {

        let storyboard: UIStoryboard = UIStoryboard (name: "Time", bundle: nil)

        let vc: TimeViewController = storyboard.instantiateViewController(withIdentifier: "Time") as! TimeViewController
        let currentController = self.getCurrentViewController()

        //右に遷移する
        let transition = CATransition()
        transition.duration = 0.5
        transition.type = kCATransitionPush

        //kCATransitionFromLeftにすれば左に遷移します
        transition.subtype = kCATransitionFromRight
        view.window!.layer.add(transition, forKey: kCATransition)
        currentController?.present(vc, animated: false, completion: nil)


    }

    func getCurrentViewController() -> UIViewController? {

        if let rootController = UIApplication.shared.keyWindow?.rootViewController {
            var currentController: UIViewController! = rootController
            while( currentController.presentedViewController != nil ) {
                currentController = currentController.presentedViewController
            }
            return currentController
        }
        return nil

    }

参考

How can I call presentViewController in UIView class?

Swift3 – PresentsViewControllerで左右に画面遷移する方法

Pocket
LinkedIn にシェア

エンジニアにおすすめできる本

Card image cap
リーダブルコード

より良いコードを書くためのシンプルで実践的なテクニック

Card image cap
Webを支える技術

HTTP,URI,HTML,そしてREST

Card image cap
誰でもPythonで作れる

儲かるAIとソフトウェアの作り方

Card image cap
プログラマが知るべき97のこと

現場で使える実践哲学のマスターピース

Card image cap
情熱プログラマー

時代を超えて。ソフトウェア開発者の幸せな生き方

Card image cap
アジャイルサムライ

プログラミング達人開発者への道

Card image cap
Rubyを作った男 まつもとゆきひろ

コードの世界 スーパー・プログラマになる14の思考法

ご提供 sponsor
 

Meee!(ミー)は、ビジネスからプライベート利用まで、個人のスキルを気軽に売り買いできるスキルマーケットです。カテゴリや居住地から、検索することが可能です。

 

ランゲージエクスチェンジは、ネイティブスピーカーと気軽にマッチングできる言語交換プラットフォームです。あなたの地元に住む外国人を探したり、留学や海外移住の前に、現地のネイティブスピーカーと繋がることもできます!

宣伝
 

りょすけトークchは、仕事や私生活をより豊にするYouTubeチャンネルです。文献(本、映画、論文)から役に立つ情報をまとめ、生涯にわたり役に立つ哲学をお届けしています。是非、チャンネル登録してみてね

-ホーム

Copyright© offブログ! , 2021 All Rights Reserved Powered by AFFINGER5.