我在快速IOS中有两个ViewControllers
(A和B)。 A和B都从互联网(单独)加载数据。我想在加载时显示activityIndicator
。我知道我可以通过在每个VC中声明一次来做坏事,如下所示
ViewController A
var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
func activityIndicatorBegin() {
activityIndicator = UIActivityIndicatorView(frame: CGRectMake(0,0,50,50))
activityIndicator.center = self.view.center
activityIndicator.hidesWhenStopped = true
activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
view.addSubview(activityIndicator)
activityIndicator.startAnimating()
disableUserInteraction()
greyView = UIView()
greyView.frame = CGRectMake(0, 0, self.view.bounds.width, self.view.bounds.height)
greyView.backgroundColor = UIColor.blackColor()
greyView.alpha = 0.5
self.view.addSubview(greyView)
}
func activityIndicatorEnd() {
self.activityIndicator.stopAnimating()
enableUserInteraction()
self.greyView.removeFromSuperview()
}
并对ViewController B执行完全相同的操作,并调用在B视图控制器中声明的activityIndicatorBegin和activityIndicatorEnd函数。但是,我想让代码更清晰。怎么可能呢?我这些天试图让代码更清洁。
谢谢,
- UPDATE -
我会想象下面的代码会起作用。但它并不是因为我无法在扩展中声明变量
var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
extension UIViewController {
func activityIndicatorBegin() {
activityIndicator = UIActivityIndicatorView(frame: CGRectMake(0,0,50,50))
activityIndicator.center = self.view.center
activityIndicator.hidesWhenStopped = true
activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
view.addSubview(activityIndicator)
activityIndicator.startAnimating()
disableUserInteraction()
greyView = UIView()
greyView.frame = CGRectMake(0, 0, self.view.bounds.width, self.view.bounds.height)
greyView.backgroundColor = UIColor.blackColor()
greyView.alpha = 0.5
self.view.addSubview(greyView)
}
func activityIndicatorEnd() {
self.activityIndicator.stopAnimating()
enableUserInteraction()
self.greyView.removeFromSuperview()
}
}
答案 0 :(得分:4)
创建一个BaseViewController
并添加这两个方法,并在activityIndicator
内声明BaseViewController
个对象。现在将BaseViewController
作为所有ViewController
的父类。之后,如果你想添加指标,只需像这样调用
1)创建BaseViewController
class BaseViewController: UIViewController {
var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func activityIndicatorBegin() {
activityIndicator = UIActivityIndicatorView(frame: CGRectMake(0,0,50,50))
activityIndicator.center = self.view.center
activityIndicator.hidesWhenStopped = true
activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
view.addSubview(activityIndicator)
activityIndicator.startAnimating()
disableUserInteraction()
greyView = UIView()
greyView.frame = CGRectMake(0, 0, self.view.bounds.width, self.view.bounds.height)
greyView.backgroundColor = UIColor.blackColor()
greyView.alpha = 0.5
self.view.addSubview(greyView)
}
func activityIndicatorEnd() {
self.activityIndicator.stopAnimating()
enableUserInteraction()
self.greyView.removeFromSuperview()
}
}
2)现在将此BaseViewController
指定为您的所有viewController
的父级
class ViewController1: BaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
//Now if you want to add activityIndicator call like this
self.activityIndicatorBegin()
//or if you want remove activityIndicator
self.activityIndicatorEnd()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
答案 1 :(得分:0)
您是否尝试使用可在A和B类中复制的所有代码创建一个基本项?如果这些类做的完全不同,你可以添加活动指示符的扩展名