【发布时间】:2017-07-22 11:38:03
【问题描述】:
我有一个带有段控制和两个子视图的控制器
@IBOutlet weak var firstContainerView: UIView!
@IBOutlet weak var secondContainerView: UIView!
@IBAction func segmentControlChanged(sender: AnyObject) {
if myController.selectedSegmentIndex == firstIndex {
self.view.sendSubview(toBack: secondContainerView)
}
else {
self.view.sendSubview(toBack: firstContainerView)
}
}
第一个子视图的视图控制器在处理大型任务时偶尔会启动 SVProgressHUD。如果我更改视图,这可以隐藏,或在 viewWillAppear / viewWillDisappear 函数中重新显示
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if (isWaiting) {
SVProgressHUD.show()
...
}
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if (isWaiting) {
SVProgressHUD.dismiss()
}
}
但是,view.sendSubView(toBack: firstContainerView) 不会触发 viewWillDisappear。
是否存在 SubView viewController 可以接收到的事件来通知它更改?
编辑
经过大量搜索,我找到了一种方法来获取包含子视图in this answer 的视图控制器。就我而言,它包含一个以编程方式创建的 UIPageViewContainer ,这一事实相当复杂。但是我可以通过this tutorial获得当前页面的viewController
所以我将它添加到最外层的视图控制器中
override func prepare(for segue: UIStoryboardSegue, identifier: SegueIdentifier, sender: Any?) {
switch identifier {
case .PagingVCSegue:
if let pvc = segue.destination as? PagingVCContainer {
self.pagingViewContainer = pvc
}
default: break
}
}
这个到分页容器
func getCurView() -> firstContainerView? {
if (pagingVC?.viewControllers?.count)! > 0 {
return pagingVC?.viewControllers![0] as? firstContainerView
}
return nil
}
然后能够在视图中调用方法来隐藏 SVProgressHUD。
【问题讨论】:
标签: swift uiview uiviewcontroller