我有以下设置:
启动VC 在闭包dataGatheringClosure
dataGatheringClosure
闭包的完成处理程序使用协议方法setData
通过委派将结果传递给 VC1 。
在setData
内, VC1 使用以下代码将结果传递给 VC2 :
if let vc2 = self.tabBarController?.viewControllers?[1] as? VC2Controller {
vc2.data = result
}
我能够将数据从启动VC 传输到 VC2 ,但是现在我需要通过在中执行dataGatheringClosure
来刷新数据>启动VC 。
我的问题是:如何从 VC2 访问启动VC 的方法?这种方法听起来不错吗?
作为一种解决方法,我在{strong> TabBar VC 中复制了dataGatheringClosure
关闭代码,并让 VC 2 调用了其self.tabBarController.dataGatheringClosure
方法。但是,它是重复的,而且我也不知道在TabBarController
内执行繁重的API请求是否是最佳实践。
答案 0 :(得分:0)
第一步是将数据与ViewController分开。如下创建一个单例类,并使用它来传递所需的数据。
$('#month').html(data);
使用以下代码在应用启动时或需要的地方初始化数据:
<html>
<div id="mainContainer" onclick="toggleFullScreen(this)" style="width:100%; height: 100%" />
<script>
var mainContainer = document.getElementById("mainContainer");
function toggleFullScreen(divObj) {
if (divObj.requestFullscreen)
if (document.fullScreenElement) {
document.cancelFullScreen();
} else {
divObj.requestFullscreen();
}
else if (divObj.msRequestFullscreen)
if (document.msFullscreenElement) {
document.msExitFullscreen();
} else {
divObj.msRequestFullscreen();
}
else if (divObj.mozRequestFullScreen)
if (document.mozFullScreenElement) {
document.mozCancelFullScreen();
} else {
divObj.mozRequestFullScreen();
}
else if (divObj.webkitRequestFullscreen)
if (document.webkitFullscreenElement) {
document.webkitCancelFullScreen();
} else {
divObj.webkitRequestFullscreen();
}
}
function changeHandler(){
var fs = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement;
if (fs) {
mainContainer.style.backgroundColor = "#3D5A80";
mainContainer.style.paddingTop = "40px";
}
else {
mainContainer.style.backgroundColor = '';
mainContainer.style.paddingTop = '';
}
}
document.addEventListener("fullscreenchange", changeHandler, false);
document.addEventListener("webkitfullscreenchange", changeHandler, false);
document.addEventListener("mozfullscreenchange", changeHandler, false);
document.addEventListener("MSFullscreenChange", changeHandler, false);
</script>
</html>
您现在可以使用静态变量Data.shared从应用程序中的任何位置访问数据。要刷新数据,您可以执行以下操作:
class Data {
static let shared = Data()
// Declare any other data properties you need here...
var result = [String]()
private init() {}
func initialize() {
// Write code to initialize the data
refresh()
}
func refresh() {
// Write code to refresh the data
}
}
希望这会有所帮助。