我正在使用此插件:https://github.com/icanzilb/SwiftSpinner/
要显示一个活动指示器,它很容易:
SwiftSpinner.show("Loading Data")
但是,我有一个观点,我来自:
performSegueWithIdentifier("ViewC1Segue", sender: self)
单击表格视图单元格时。
问题是,当我转到这个新视图时,会出现一个初始的空白屏幕,因为数据是通过alamofire加载的,需要一些时间来加载。
有没有办法在一个视图上加载活动微调器,让视图在它下面改变,然后当我在新视图上使用.hide()时,微调器将消失?
还有另一个困境:
我尝试将swift微调器添加到新的viewDidLoad上。但是,它可以工作,大部分内容都是在ViewDidAppear函数下加载的。一旦我添加此函数,微调器就无法加载。
好的,我还有另外一个问题:
在数据加载之前,在开头不显示空白视图的最佳方法是什么?
答案 0 :(得分:0)
如果你想让微调器有几个视图,你可以为它创建一个新的LoadingViewController和一个nib,将它设置为backgroundColor
透明,在当前上下文中显示LoadingViewController(或者结束)全屏)并仅在LoadingViewController上显示微调器。
这样,您可以在任何视图上显示微调器,并从另一个视图中将其关闭。下面是一些代码。
为它创建LoadingViewController及其委托:
protocol LoadingViewControllerDelegate {
func didFinishLoading(controller: LoadingViewController)
}
class LoadingViewController: UIViewController {
var delegate: LoadingViewControllerDelegate? = nil
override func viewDidLoad() {
// Do your spinner code here
}
// Delegate function, should be fired when loading is done.
func finished() {
if self.delegate != nil {
self.delegate?.didFinishLoading(self)
}
}
}
在第一个ViewController中,显示LoadingViewController:
let loading = LoadingViewController(nibName: "LoadingViewController", bundle: nil)
loading.modalTransitionStyle = .CrossDissolve
loading.modalPresentationStyle = .OverFullScreen
presentViewController(loading, animated: true, completion: nil)
在第二个ViewController中,实现一个接收LoadingViewController的方法:
var loading: LoadingViewController? = nil
再次在你的第一个ViewController中,将数据发送到第二个:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "ViewC1Segue" {
let destination = segue.destinationViewController as! SecondViewController
destination.loading = self.loading
}
}
现在在你的第二个ViewController中,符合LoadingViewControllerDelegate
并设置委托:
class SecondViewController: UIViewController, LoadingViewControllerDelegate {
...
override func viewDidLoad() {
loading.delegate = self
}
...
// MARK: - LoadingViewControllerDelegate
func didFinishLoading(controller: LoadingViewController) {
controller.dismissViewControllerAnimated(true, completion: nil)
}
}
在你的Alamofire电话中,完成后运行以下内容:
loading.finished()