[英]Show network activity indicator on Share Extension iOS
通常,在主應用程序中,我們可以使用它來顯示網絡活動指示器。
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
但是,在共享擴展中,我們沒有[UIApplication sharedApplication]。 如何在共享擴展中顯示網絡活動指示器?
您只是無法從 iOS 共享擴展訪問 sharedApplication 對象,因此無法使用該對象上的任何方法。
看一下部分:“某些 API 對應用擴展不可用”
使用UIActivityIndicatorView代替,您甚至可以將其定位到狀態欄。
我將這種方法用於通知擴展(服務和內容),但一般來說,對於擴展中不可用的 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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.