簡體   English   中英

在共享擴展 iOS 上顯示網絡活動指示器

[英]Show network activity indicator on Share Extension iOS

通常,在主應用程序中,我們可以使用它來顯示網絡活動指示器。

[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];

但是,在共享擴展中,我們沒有[UIApplication sharedApplication]。 如何在共享擴展中顯示網絡活動指示器?

您只是無法從 iOS 共享擴展訪問 sharedApplication 對象,因此無法使用該對象上的任何方法。

一下部分:“某些 API 對應用擴展不可用”

使用UIActivityIndi​​catorView代替,您甚至可以將其定位到狀態欄。

我將這種方法用於通知擴展(服務和內容),但一般來說,對於擴展中不可用的 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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM