访问容器视图子属性 swift
Access container view child properties swift
我想达到的目标:
用户按下 ViewController 中的按钮,放置在容器视图中的按钮的颜色应更改为红色。
如何从 ViewController 访问放置在容器视图中的按钮?
一步一步:
- 命名视图控制器和容器视图控制器之间的连接。
- 向您的视图控制器添加一个 属性,它将包含容器视图控制器。
- 在你的视图控制器中实现一个方法
prepareForSegue(_:sender:)
。
- 在方法中检查
segue.identifier
是否等于您在步骤 1 中指定的标识符。
- 如果为真,则将第 2 步中的
segue.destinationViewController
保存到您的 属性。
- 现在您已将容器视图控制器存储在 属性 中,因此您可以从 class 进行自定义。您应该已经将视图控制器存储在
viewDidLoad()
方法中。
示例:
var containerViewController: YourContainerViewControllerClass?
let containerSegueName = "testSegue"
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == containerSegueName {
containerViewController = segue.destinationViewController as? YourContainerViewControllerClass
}
}
我建议不要依赖 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
}
}
这样可以避免拼写错误的 segue 名称。
Swift macOS 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
}
}
}
检查标识符和控制器class。
Swift4,Xcode9.4.1
var contentViewController : UIContentViewController?
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == containerSegueName {
contentViewController = segue.destination as? UIContentViewController
}
}
我想达到的目标:
用户按下 ViewController 中的按钮,放置在容器视图中的按钮的颜色应更改为红色。
如何从 ViewController 访问放置在容器视图中的按钮?
一步一步:
- 命名视图控制器和容器视图控制器之间的连接。
- 向您的视图控制器添加一个 属性,它将包含容器视图控制器。
- 在你的视图控制器中实现一个方法
prepareForSegue(_:sender:)
。 - 在方法中检查
segue.identifier
是否等于您在步骤 1 中指定的标识符。 - 如果为真,则将第 2 步中的
segue.destinationViewController
保存到您的 属性。 - 现在您已将容器视图控制器存储在 属性 中,因此您可以从 class 进行自定义。您应该已经将视图控制器存储在
viewDidLoad()
方法中。
示例:
var containerViewController: YourContainerViewControllerClass?
let containerSegueName = "testSegue"
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == containerSegueName {
containerViewController = segue.destinationViewController as? YourContainerViewControllerClass
}
}
我建议不要依赖 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
}
}
这样可以避免拼写错误的 segue 名称。
Swift macOS 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
}
}
}
检查标识符和控制器class。
Swift4,Xcode9.4.1
var contentViewController : UIContentViewController?
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == containerSegueName {
contentViewController = segue.destination as? UIContentViewController
}
}