我正在使用xlpagertabstrip,我有一个父视图控制器,它有两个子节点(child1,child2)。
在我的父视图控制器中,我显示了一个活动视图指示器,但我想知道如何在我的孩子1中隐藏该指示器。
这是我的代码:
ParentViewController:
override func viewDidLoad() {
showActivityIndicator()
super.viewDidLoad()
}
func showActivityIndicator() {
//code related to titleview
navigationItem.titleView = titleView
}
func hideActivityIndicator() {
navigationItem.titleView = nil
}
Child1ViewController:
override func viewDidLoad() {
super.viewDidLoad()
call_api()
}
func call_api(){
//code related to api
//if api is ok, I call hideActivityIndicator()
let pctrl = ParentViewController()
pctrl.hideActivityIndicator()
}
但该代码不起作用。我怎么解决这个问题?
只需将hideActivityIndicator()
从父母传给孩子,并在必要时给他打电话。因此,每当您创建子控制器时,请执
// Parent Controller
childVC.someMethodFromParent = hideActivityIndicator
在你的ChildController中执行以下操作:
// Child Controller
internal var someProperty: (() -> Void)!
override func viewDidLoad() {
super.viewDidLoad()
call_api()
}
func call_api(){
//code related to api
//if api is ok, I call hideActivityIndicator()
someMethodFromParent()
}
这应该工作
如何拥有子视图控制器代表?就像是:
classParentViewController {
func someFunc(){
...
childVC.delegate = self
...
}
}
extension ParentViewController: ChildViewControllerDelegate {
func childViewControllerDidFinishApiCall() {
hideActivityIndicator()
}
}
protocol ChildViewControllerDelegate: class {
func childViewControllerDidFinishApiCall()
}
class ChildViewController {
weak var delegate: ChildViewControllerDelegate?
func call_api(){
//code related to api
let pctrl = ParentViewController()
delegate?.childViewControllerDidFinishApiCall()
}
}