adding/removing 子视图时只调用一次 API
Call API only once when adding/removing subview
我有一个分段控件,单击分段可通过将视图添加到容器视图来显示视图。单击其他段控件时,将删除旧视图并使用下面给出的函数添加新视图。以这种方式添加 VC 会调用 viewDidLoad
,我从 API 获取数据。当添加 VC 时,每次单击时间段都会调用 API。如何防止每次添加视图时都调用 API?
有什么方法可以隐藏旧视图而不是将其删除,这将阻止每次单击片段时实例化 VC。
或者有没有其他更好的方法来显示 VCs 在分段点击时?
@IBAction func show(_ sender: UISegmentedControl) {
switch sender.selectedSegmentIndex {
case 0:
let vc1 = VC1.instantiate()
self.cycleFromViewController(oldViewController: self.currentVC!, toViewController: vc1)
self.currentVC = vc1
case 1:
let vc2 = VC2.instantiate()
self.cycleFromViewController(oldViewController: self.currentVC!, toViewController: vc2)
self.currentVC = vc2
default:
break
}
}
func cycleFromViewController(oldViewController: UIViewController, toViewController newViewController: UIViewController) {
oldViewController.willMove(toParent: nil)
self.addChild(newViewController)
self.addSubview(subView: newViewController.view, toView:self.containerView!)
newViewController.view.alpha = 0
newViewController.view.layoutIfNeeded()
UIView.animate(withDuration: 0.5, animations: {
newViewController.view.alpha = 1
oldViewController.view.alpha = 0
},
completion: { finished in
oldViewController.view.removeFromSuperview()
oldViewController.removeFromParent()
newViewController.didMove(toParent: self)
})
}
创建
var vc1,vc2,currentVC:UIViewController?
然后在 viewDidLoad
中创建并分配 vc1
和 vc2
并设置 currentVC = vc1
然后和他们一起玩 view.isHidden
我有一个分段控件,单击分段可通过将视图添加到容器视图来显示视图。单击其他段控件时,将删除旧视图并使用下面给出的函数添加新视图。以这种方式添加 VC 会调用 viewDidLoad
,我从 API 获取数据。当添加 VC 时,每次单击时间段都会调用 API。如何防止每次添加视图时都调用 API?
有什么方法可以隐藏旧视图而不是将其删除,这将阻止每次单击片段时实例化 VC。
或者有没有其他更好的方法来显示 VCs 在分段点击时?
@IBAction func show(_ sender: UISegmentedControl) {
switch sender.selectedSegmentIndex {
case 0:
let vc1 = VC1.instantiate()
self.cycleFromViewController(oldViewController: self.currentVC!, toViewController: vc1)
self.currentVC = vc1
case 1:
let vc2 = VC2.instantiate()
self.cycleFromViewController(oldViewController: self.currentVC!, toViewController: vc2)
self.currentVC = vc2
default:
break
}
}
func cycleFromViewController(oldViewController: UIViewController, toViewController newViewController: UIViewController) {
oldViewController.willMove(toParent: nil)
self.addChild(newViewController)
self.addSubview(subView: newViewController.view, toView:self.containerView!)
newViewController.view.alpha = 0
newViewController.view.layoutIfNeeded()
UIView.animate(withDuration: 0.5, animations: {
newViewController.view.alpha = 1
oldViewController.view.alpha = 0
},
completion: { finished in
oldViewController.view.removeFromSuperview()
oldViewController.removeFromParent()
newViewController.didMove(toParent: self)
})
}
创建
var vc1,vc2,currentVC:UIViewController?
然后在 viewDidLoad
中创建并分配 vc1
和 vc2
并设置 currentVC = vc1
然后和他们一起玩 view.isHidden