在Swift

时间:2015-11-17 08:11:56

标签: ios swift uiactivityindicatorview

我回到页面后,我的活动指示似乎没有消失。它第一次消失了。然后我转到第二个视图控制器然后返回第一个视图控制器。据说所有UIViews都已出现,活动指标似乎没有出现。

我的代码

var activityView : UIActivityIndicatorView = UIActivityIndicatorView(frame: CGRectMake(0,0, 50, 50)) as UIActivityIndicatorView

override func viewDidLoad() {
super.viewDidLoad()
Alamofire.request(.POST , "192.168.0.1/test", parameters: [])
            .responseJSON { response in
                if response.result.isSuccess {
                    var jsonObj = JSON(response.result.value!)
                    print(jsonObj)
                    self.activityView.stopAnimating()
                }
        }
}

override func viewDidAppear(animated: Bool) {
        activityView.center = self.view.center
        activityView.hidesWhenStopped = true
        activityView.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
        view.addSubview(activityView)
        activityView.startAnimating()
    }

2 个答案:

答案 0 :(得分:1)

您正在viewDidAppear中展示您的activityIndi​​cator。这就是为什么当你从第二个回到第一个时出现的原因。另请查看view life cycle。只有在初始化视图控制器时才会调用viewDidLoad,但在显示视图控制器时将调用viewDidAppear。 (返回导航或再次出现)

因此,最好在viewDidLoad中添加视图,并且活动指示符应始终与其网络呼叫相关联。在开始呼叫之前显示活动指示器并在完成后隐藏或删除。

此外,您错过了super来电。在覆盖时务必调用超级方法。

例如:

override func viewDidLoad() {
    super.viewDidLoad()
    addActivityIndicator()
    fetchRemoteData()
}

func addActivityIndicator() {
    activityView.center = self.view.center
    activityView.hidesWhenStopped = true
    activityView.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
    view.addSubview(activityView)
}

func fetchRemoteData() {
    activityView.startAnimating()
    Alamofire.request(.POST , "192.168.0.1/test", parameters: [])
        .responseJSON { response in
            if response.result.isSuccess {
                var jsonObj = JSON(response.result.value!)
                print(jsonObj)
                self.activityView.stopAnimating()
            }
    }
}

答案 1 :(得分:0)

你想隐藏并在你想要的时候显示你的活动指标。并且还要确保设置为bringSubviewToFront