在Share Extension iOS上显示网络活动指示器

时间:2015-10-30 04:11:01

标签: ios ios8-share-extension

通常,在主应用中,我们可以使用它来显示网络活动指标。

[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];

但是,在共享扩展中,我们没有[UIApplication sharedApplication]。如何在共享扩展中显示网络活动指示器?

2 个答案:

答案 0 :(得分:2)

您只是对iOS Share Extension中的sharedApplication对象没有访问权限,因此无法使用该对象上的任何方法。

take a look部分:“某些API不适用于App Extensions”

使用UIActivityIndicatorView代替,您可以将其定位到状态栏甚至。

答案 1 :(得分:0)

我将这种方法用于通知扩展(服务和内容),但通常,对于扩展中不可用的API,您有两种方法:

委托

创建(或重用)封装所需功能的协议。在这种情况下,我们只需要activityIndi​​cator标志:

public protocol ActivityIndicatorDelegate {
    var isNetworkActivityIndicatorVisible : Bool { get set }
}

您可以让您的UIApplicationDelegate实现此协议,作为对UIApplication.shared成员的传递。

然后,在您的框架中,只需使用委托即可:

var activityIndicatorDelegate : ActivityIndicatorDelegate? = nil;

// Begin some network activity
self.activityIndicatorDelegate?.isNetworkActivityIndicatorVisible = true;

功能参数

如果可能,请重构代码以接受对UIApplication或UIApplicationDelegate对象的引用,然后直接调用所需的任何方法。

// NOT ALLOWED IN APP EXTENSION
public static var activeTraitCollection : UITraitCollection? {
    let appDelegate = UIApplication.shared.delegate;
    let window = appDelegate?.window;

    return window??.traitCollection;
}

// OK FOR APP EXTENSION
public static func activeTraitCollection (for appDelegate: UIApplicationDelegate) -> UITraitCollection? {
    let window = appDelegate?.window;
    return window??.traitCollection;
}