2017-10-23 3 views
1

私はpresentを使用してビューコントローラを開きます。View Controllerをカスタムデータで初期化するにはどうすればよいですか?

self.storyboard = UIStoryboard(name: "myStoryboard", bundle: nil) 
self.myView = self.storyboard?.instantiateInitialViewController() as? myViewController 
self.present(self.myView!, animated: true) { _ in } 

は、その後、私はイニシャライザ

class myViewController: UIViewController { 

    var dataA: String? 
    var dataB: String? 

    override init(dataA: String, dataB: String) { 
     self.dataA = dataA 
     self.dataB = dataB 
     super.init(nibName: nil, bundle: nil) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
    } 
} 

からデータを取得しようとしているビューコントローラに私がどのように私はinitをオーバーライドして、この場合にデータを渡す必要があり、エラーにInitializer does not override a designated initializer from its superclass

を取得しますか?

+0

インスタントイニシャライザは、 'instantiateInitialViewController()'を呼び出すときにはまったく呼び出されません。プログラムで最初のView Controllerをインスタンス化する特別な理由はありますか? – vadian

+0

storyboardからviewcontrollerをロードするときに、initWithCoderが呼び出されます。ストーリーボードからviewcontrollerをインスタンス化した後にデータを取得して呼び出すメソッドを作成しないのはなぜですか? –

+0

@vadian私は、ハイブリッドアプリケーション用のCordovaプラグインを作成する例を示しています。これが正しい方法であるかどうかは不明です – vincentf

答えて

0

ストーリーボードを使用している以外の方法はないと思います。 Swinjectはそれを別の方法で行います。

class myViewController: UIViewController { 

    var dataA: String? 
    var dataB: String? 

    fun initialize(dataA: String, dataB: String) { 
     self.dataA = dataA 
     self.dataB = dataB 
    } 
} 

や他のクラスの

self.storyboard = UIStoryboard(name: "myStoryboard", bundle: nil) 
self.myView = self.storyboard?.instantiateInitialViewController() as? myViewController 
self.myView.initialize(dataA: dataA, dataB: dataB) 
self.present(self.myView!, animated: true) { _ in } 

か、他の方法でそれを行うと、インスタンスを返します静的FUNCを作成することができます。しかし、私は最初の方法を好む。

class myViewController: UIViewController { 

    var dataA: String? 
    var dataB: String? 

    static func instance(dataA: String, dataB: String) -> myViewController { 
     //You could pass storyboard too 
     let storyboard = UIStoryboard(name: "myStoryboard", bundle: nil) 

     let myView = storyboard.instantiateInitialViewController() as? myViewController 
     self.dataB = dataB 
     self.dataA = dataA 

     return myView 
    } 
} 
関連する問題