ストーリーボードに表示したコンテナビューがあります。別のシーンへの埋め込みセグエを表す素晴らしい小さな矢印があります。そのシーンの最上位オブジェクトは、カスタムUIViewController
によって制御されます。カスタムクラスに実装されているメソッドを呼び出したい。コンテナにアクセスできる場合、内部の内容への参照を取得するにはどうすればよいですか?
prepareForSegue
のメソッドであるUIViewController
を使用して、現在のView ControllerからUIViewController
へのアクセスを取得できます。これには、embed
セグエが含まれます。
prepareForSegue
に関するドキュメントから:
このメソッドのデフォルト実装は何もしません。関連するデータを新しいView Controllerに渡す必要がある場合、View Controllerはこのメソッドをオーバーライドします。セグエオブジェクトは遷移を記述し、セグエに関係する両方のView Controllerへの参照を含みます。
あなたの質問では、カスタムView Controllerでメソッドを呼び出す必要があると述べました。これを行う方法の例を次に示します。
1。埋め込みセグエに識別子を付けます。 Interface Builderでこれを行うには、セグエを選択し、Attributes Editorに移動して、Storyboard Embedセグエ。
2。クラスを次のように作成します。
embeddedViewController
への参照が保持されるため、myMethod
を後で呼び出すことができます。暗黙的にラップされていないオプションであると宣言されています。これは、nil以外の初期値を指定しても意味がないためです。
// This is your custom view controller contained in `MainViewController`.
class CustomViewController: UIViewController {
func myMethod() {}
}
class MainViewController: UIViewController {
private var embeddedViewController: CustomViewController!
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let vc = segue.destination as? CustomViewController,
segue.identifier == "EmbedSegue" {
self.embeddedViewController = vc
}
}
// Now in other methods you can reference `embeddedViewController`.
// For example:
override func viewDidAppear(animated: Bool) {
self.embeddedViewController.myMethod()
}
}
。Identity Inspectorを使用して、IBのUIViewControllers
のクラスを設定します。例えば:
そして今、すべてが動作するはずです。お役に立てば幸いです!
ABakerの答えは、親が子供について学ぶ素晴らしい方法を提供します。子のコードが親に到達するには、self.parent
(またはObjCではparentViewController
)を使用します。