关闭子视图后重新加载视图
Posted
技术标签:
【中文标题】关闭子视图后重新加载视图【英文标题】:Reload a View after Closing its subView 【发布时间】:2021-10-23 18:47:27 【问题描述】:我有一个名为 A 的 UIViewController,我像这样向 A 控制器添加另一个控制器
self.AView = (self.storyboard!.instantiateViewController(withIdentifier: "BView") as? BViewController)!
self.addChild(self.BView)
self.BView.view.frame = CGRect(x: 0, y: self.view.frame.height - 450, width: self.view.frame.width , height: 450)
self.view.addSubview((self.BView.view)!)
self.view.bringSubviewToFront(self.BView.view)
我正在使用下面的函数关闭它
func closeCurrentView()
self.view.removeFromSuperview()
关闭后我需要重新加载我的 Aview
我在 My Aview 中添加了这个,但在关闭 BView 后没有被调用
override func viewWillAppear(_ animated: Bool)
super.viewWillAppear(true)
【问题讨论】:
与问题无关,您不应该对发送给任何超级调用的参数进行硬编码。而是这样称呼它super.viewWillAppear(animated)
是的,好吧!但我的问题还没有解决
是的。这就是irrelevant to the issue
的意思。
【参考方案1】:
viewWillAppear 方法仅在视图将进入视图层次结构时调用,在这种情况下,在 BView 被移除之前,AView 已经在视图层次结构中,即使不可见(因此当 BView 被移除时不会调用 AViewController.viewWillAppear)。你有两个选择:
-
将 AViewController 的引用传递给 BViewController(在初始化期间或之后),以便您可以在 BViewController 类中执行此操作:
func closeView()
self.view.removeFromSuperview()
self.AViewController.view.layoutIfNeeded() // or do something else to update AView
-
删除 AViewController 类中的 BView:
func closeBView()
self.BViewController.view.removeFromSuperview()
self.view.layoutIfNeeded() // or do something else to update AView
【讨论】:
以上是关于关闭子视图后重新加载视图的主要内容,如果未能解决你的问题,请参考以下文章
UITableViewCell 自定义类 - 更改子视图高度约束后重新加载单元格高度
从 iOS 中的 UIView 子视图重新加载时 UITableView 未重新加载