web-dev-qa-db-ja.com

コンテナビューの子プロパティにアクセスするswift

私が達成したいこと:

ユーザーがViewControllerのボタンを押すと、コンテナービューに配置されたボタンの色が赤に変わります。

ViewControllerからコンテナビューに配置されたボタンにアクセスするにはどうすればよいですか?

enter image description here

20
Tom el Safadi

ステップバイステップ:

  1. View ControllerとContainer View Controllerの間のセグエに名前を付けます。
  2. コンテナービューコントローラーを含むビューコントローラーにプロパティを追加します。
  3. View ControllerでメソッドprepareForSegue(_:sender:)を実装します。
  4. メソッドで、_segue.identifier_が手順1で指定した識別子と等しいかどうかを確認します。
  5. Trueの場合、ステップ2のプロパティに_segue.destinationViewController_を保存します。
  6. これで、プロパティにコンテナビューコントローラが保存され、クラスからカスタマイズを行えるようになりました。 View ControllerをviewDidLoad()メソッドに保存しておく必要があります。

例:

_var containerViewController: YourContainerViewControllerClass?
let containerSegueName = "testSegue"
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == containerSegueName {
        containerViewController = segue.destinationViewController as? YourContainerViewControllerClass
    }
}
_
44
sunshinejr

segue.identifierに依存するのではなく、destination型を直接テストすることをお勧めします。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    super.prepare(for: segue, sender: sender)

    if let vc = segue.destination as? YourViewController {
        vc.someVariable = true
    }
}

このようにして、つづりの間違ったセグエ名の間違いを避けることができます。

19
Andrey Gordeev

Swift 4、Xcode 9.4.1

var contentViewController : UIContentViewController?

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == containerSegueName {
       contentViewController = segue.destination as? UIContentViewController
    }
}
2
Saranjith

MacOS用Swift 3:

// MARK: - Container View Controller

var containerViewController: ContainerViewController?

let containerSegueIdentifier = "Container Segue"

override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
    if segue.identifier == containerSegueIdentifier {
        if let connectContainerViewController = segue.destinationController as? FormationViewController {
            formationViewController = connectContainerViewController
        }
    }
}

識別子とコントローラクラスを確認してください。

1
asdf