【问题标题】:Pass data from Parent UIviewController to a Container (ChildViewController) every time the value is changed每次更改值时将数据从父 UIviewController 传递到容器 (ChildViewController)
【发布时间】:2020-12-05 21:32:56
【问题描述】:

我有一个 UIViewController,它有两个容器,每个容器都与一个 UIViewController 相关,以实现某些特定功能。

对于那些贬低我的问题的人,如果你让我走上正确的道路,将会更有帮助和感激。

我要做的是将数据从父 ViewController 传递到 childViewControllers

  • 我尝试使用协议/委托:但问题是,我 无法将委托分配给 childViewContainer,因为它 没有来自父级的实例。

  • 我的第二次尝试是使用 prepare 函数,但它并不能很好地工作,因为一旦父级首先加载两个容器就会加载。因此,如果在 parentViewController 中更改了值,我将无法再次将其传递给孩子。

有什么想法吗?

【问题讨论】:

  • 显示父级创建这些子级的代码。
  • 我使用情节提要创建了它们,并使用它们的“alpha= 0 或 alpha = 1”在它们之间切换
  • 你签到Notifications了吗? (我仍然相信委托模式应该更好地工作,但你真的应该展示足够的东西让我复制你 exact 的问题。)

标签: ios swift uiviewcontroller childviewcontroller


【解决方案1】:

经过更深入的挖掘,我能够为自己的问题找到解决方案。 以后如果有其他人需要,我会在这里发帖

所以,首先,我需要它从父控制器而不是故事板中午餐 ChildContoller (所以我删除了父子之间的 segue。 像这样为 childController 创建一个变量:

 lazy  var firstChildViewController: FirstChildViewController =  {
        let storynoard = UIStoryboard(name: "Main", bundle: nil)
        let viewController = storynoard.instantiateViewController(identifier: "firstChild") as! FirstChildViewController
    self.addChild(viewController)
    self.view.addSubview(viewController.view)
        return viewController
        
    }()

如果你有两个孩子,另一个也一样

然后在viewDidLoad中:

   override func viewDidLoad() {
        
        super.viewDidLoad()
        firstChildViewController.view.isHidden  = false
        secondChildViewController.view.isHidden = true
    }

然后在FirstChildViewController中:

    override func viewDidLoad() {
    
    super.viewDidLoad()
    if let parent = self.parent as? ParentViewController {
     parent.delegate = self
 }

}

问题解决了 希望它可以帮助某人

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-01
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 2016-07-22
    • 2013-03-08
    相关资源
    最近更新 更多