56863


カスタムView（xib)を表示する際に、PresentModallySegueのように表示したいのです。

そのためにはStoryboardを利用せずにコードだけでSegueのモノマネをしなければなりません。

この方法は可能でしょうか？

可能であればどのように実装するかご教授お願い致します。


CC BY-SA 4.0
2019-07-24T07:42:52.120
56862
2019-07-25T04:35:10.003
question
swift
StoryBoardを利用せずにPresentModallySegueを利用する方法


前提として、Viewではなく、ViewControllerの表示として回答しますが、

**可能** です。

UIViewControllerの[present(_:animated:completion:)](https://developer.apple.com/documentation/uikit/uiviewcontroller/1621380-present)メソッドを使用してください。

なお、Storyboardが導入された iOS ５
以前にはSegueもありませんでしたので、常にそのようにモーダルなビューコントローラーは表示されていました。  
（実際には前身の[presentModalViewController:animated:](https://developer.apple.com/documentation/uikit/uiviewcontroller/1621465-presentmodalviewcontroller)が使われていました）

**追記**

文字通り

> カスタムView（xib)を表示する

場合でも、ViewをViewControllerに紐付けて、ViewControllerとして表示する必要があります。

そのためには、UIViewController（またはそのサブクラス)を
[init(nibName:bundle:)](https://developer.apple.com/documentation/uikit/uiviewcontroller/1621359-init)で初期化します。

例

[code]

    class MyViewController: UIViewController {
    
        // (略)
    
        func someButtonTapped(_ sender: Any) {
            // nib(xib)を使ってViewControllerのインスタンスを作成する
            let modalVC = SecondViewController(nibName: "xibのファイル名", bundle: nil)
            // 作成したViewControllerをモーダル表示する
            self.present(modalVC, animated: true) {
                print("モーダル表示完了")
            }
        }
    }
    
    class SecondViewController : UIViewController {
        // (略)
    }
    
[/code]

ViewControllerをxibのOwnerに指定することで、Viewの上に載せたボタンやラベルとViewControllerのIBOutletやIBActionを紐付ける事ができます。  
これもどちらかというとStoryBoard登場以前によく使われた方法になります。


CC BY-SA 4.0
2019-07-24T08:18:05.893
56863
2019-07-25T04:35:10.003
2019-07-25T04:35:10.003
23829
23829
56862
answer