我有一个我的UIViewControllers扩展的BaseViewController,所以我可以拥有我不需要重写的显式函数。我想要的是self.showSpinner()
之类的函数,viewController会显示微调器
我的代码看起来像这样
class BaseViewController: UIViewController {
var actvIndicator : UIActivityIndicatorView!
override func viewDidLoad() {
super.viewDidLoad()
self.actvIndicator = UIActivityIndicatorView(activityIndicatorStyle: .WhiteLarge)
self.actvIndicator.color = UIColor.blackColor()
self.actvIndicator.backgroundColor = UIColor.blackColor()
self.actvIndicator.frame = CGRectMake(self.view.frame.size.width / 2, self.view.frame.size.height / 2, 100, 100);
self.actvIndicator.center = self.view.center
self.actvIndicator .startAnimating()
self.view.addSubview(self.actvIndicator)
self.actvIndicator.bringSubviewToFront(self.view)
self.edgesForExtendedLayout = UIRectEdge.None
self.navigationController?.navigationBar.translucent = false
}
func showSpinner(){
self.actvIndicator.startAnimating()
}
func hideSpinner(){
self.actvIndicator.stopAnimating()
}
}
我的viewcontrollers看起来像这样
class MyProjectViewController: BaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.showSpinner()
}
}
MyProjectViewController
有UITableView
填充整个屏幕。当我设置tblProjects.alpha = 0
时,我可以看到微调器。但我希望它在前面。
我也试过self.view.bringSubviewToFront(self.actvIndicator)
我缺少什么?
答案 0 :(得分:2)
在我进入我认为您的问题之前的几个简短说明:
bringSubviewToFront:
中的viewDidLoad:
(无论如何都使用了错误)。viewWillAppear:
或其他变体。现在您的问题很可能是一个视图层次结构问题(进一步通过您的评论确认),因此可以通过每次您希望它显示时将微调器推到前面来修复,例如:
func showSpinner() {
self.view.bringSubviewToFront(self.actvIndicator)
self.actvIndicator.startAnimating()
}
答案 1 :(得分:0)
这里的问题在于,在您调用self.view.bringSubviewToFront(self.actvIndicator)
之后绘制了表格视图。可能的解决方法是在显示微调器时调用bringSubviewToFront
func showSpinner(){
self.view.bringSubviewToFront(self.actvIndicator)
self.actvIndicator.startAnimating()
}