Swift - 实现全局活动指示器

4
我目前正在尝试在Swift中制作全局活动指示器,每当对API进行获取时调用该指示器。想法是活动指示器将出现在导航栏的左上角(导航视图控制器的子级),并且在每个应用程序页面上都可用。
我已经正确显示了活动指示器,但不确定如何使其在应用程序的任何页面上可用-我考虑过使用扩展,但不确定最佳方法是什么。非常感谢您的帮助。
活动指示器代码:
let activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.White)
var activityItem = UIBarButtonItem()

func navBarActivity() {
    // Call navBarActivity() to start activity indicator
    // Use navigationItem.leftBarButtonItem = nil to stop activity indicator
    activityIndicator.startAnimating()
    activityIndicator.hidden = false

    self.activityItem = UIBarButtonItem(customView: activityIndicator)
    self.navigationItem.leftBarButtonItem = activityItem
}
1个回答

7
我建议使用这样的扩展。
extension UIViewController {
    func displayNavBarActivity() {
        let indicator = UIActivityIndicatorView(activityIndicatorStyle: .White)
        indicator.startAnimating()
        let item = UIBarButtonItem(customView: indicator)

        self.navigationItem.leftBarButtonItem = item
    }

    func dismissNavBarActivity() {
        self.navigationItem.leftBarButtonItem = nil
    }
}

在进行API调用之前,请调用self.displayNavBarActivity(),并在API调用完成后调用self.dismissNavBarActivity()
然而,我希望你检查UIApplicationnetworkActivityIndicatorVisible。考虑使用此选项。

如果应用程序应该显示网络活动,则指定为YES;如果不应该,则指定为NO。默认值为NO。状态栏中的旋转指示器显示网络活动。应用程序可以明确隐藏或显示此指示器。

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplication_Class/#//apple_ref/occ/instp/UIApplication/networkActivityIndicatorVisible


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接