通常,在主应用中,我们可以使用它来显示网络活动指标。
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
但是,在共享扩展中,我们没有[UIApplication sharedApplication]。如何在共享扩展中显示网络活动指示器?
答案 0 :(得分:2)
您只是对iOS Share Extension中的sharedApplication对象没有访问权限,因此无法使用该对象上的任何方法。
take a look部分:“某些API不适用于App Extensions”
使用UIActivityIndicatorView代替,您可以将其定位到状态栏甚至。
答案 1 :(得分:0)
我将这种方法用于通知扩展(服务和内容),但通常,对于扩展中不可用的API,您有两种方法:
创建(或重用)封装所需功能的协议。在这种情况下,我们只需要activityIndicator标志:
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;
}