iOS擴充Extension之Today

來源:互聯網
上載者:User

標籤:tla   大小   認證   ios   body   將不   nim   anim   ref   

1、簡介

  擴充(Extension)是iOS 8中引入的一個新特性。擴充讓app之間的資料互動成為可能。在iOS 8系統之前,每一個app在物理上都是彼此獨立的,app之間不能互訪彼此的私人資料。而在引入擴充之後,其他app可以與擴充進行資料交換。iOS 8系統有6個支援擴充的系統地區,分別是Today、Share、Action、Photo Editing、Storage Provider、Custom keyboard。支援擴充的系統地區也被稱為擴充點。本文只簡單記錄Today的使用!

 

2、Today擴充的建立

  方法一:通過路徑File -->New -->Target建立!

  方法二:直接點擊項目-->點擊 + 即可!

 

2、Today簡介和方法說明

  Today擴充的一種,雖然依附在App中,但是它是單獨的個體,所使用的檔案、資源、第三方等,都需要單獨設定!

  Today建立之後,其實就是一個ViewController!最小高度為110pt。有三方協議方法:

// iOS10 新增的方法// 用來設定Widget是展開還是摺疊狀態的方法,可以設定相關的preferredContentSizes屬性修改大小- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize{    if (activeDisplayMode == NCWidgetDisplayModeCompact) {        NSLog(@"疊起狀態下的預設size:%@", NSStringFromCGSize(maxSize));    } else {        NSLog(@"展開狀態下的預設size:%@", NSStringFromCGSize(maxSize));    }    }// 該方法是用來告知Widget控制器是否需要更新的一個協議方法 - (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler {    // Perform any setup necessary in order to update the view.        // If an error is encountered, use NCUpdateResultFailed    // If there‘s no update required, use NCUpdateResultNoData    // If there‘s an update, use NCUpdateResultNewData    completionHandler(NCUpdateResultNewData);//    typedef NS_ENUM(NSUInteger, NCUpdateResult) {//        NCUpdateResultNewData,//        NCUpdateResultNoData,//        NCUpdateResultFailed//    } NS_ENUM_AVAILABLE_IOS(8_0);}// iOS10 版本之後將不會再被喚起// 用來設定Widget控制器邊框間距的方法,如果出現偏差,可以調整此方法的傳回值進行操作- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets NS_DEPRECATED_IOS(8_0, 10_0, "This method will not be called on widgets linked against iOS versions 10.0 and later.");

  2.1 通過Storyboard載入和編碼載入兩種選擇:

    通過修改plist檔案storyboard

    編碼載入設定:

 

  2.2 Today的展開和摺疊:

    第一步:設定 widgetLargestAvailableDisplayMode屬性;

    self.extensionContext.widgetLargestAvailableDisplayMode = NCWidgetDisplayModeExpanded;

    第二步:實現協議方法;

// iOS10 新增的方法// 用來設定Widget是展開還是摺疊狀態的方法,可以設定相關的preferredContentSizes屬性修改大小- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize{    if (activeDisplayMode == NCWidgetDisplayModeCompact) {        NSLog(@"疊起狀態下的預設size:%@", NSStringFromCGSize(maxSize));    } else {        NSLog(@"展開狀態下的預設size:%@", NSStringFromCGSize(maxSize));    }    }

  

3、共用資料

  通過擴充點進行資料的共用,真機測試需要在開發人員網站註冊一個App Groups。模擬器親測可以免費使用(App Groups的測試group.com.xxx.TextToday),後面是Bundle Identifier。

  3.1 開發人員網站註冊一個App Groups

  3.2 認證使用自動簽名部署,設定項目和Today的target中添加APPGroups選項

  3.3 項目中儲存資料,在Today中擷取資料

    通過[[NSUserDefaults alloc] initWithSuiteName:@"groupName"]這個格式去建立NSUserDefaults對象,groupName填寫當前設定AppGroups勾選的名字。

- (void)savaDataWithArray:(NSArray *)dataArray {    NSData  *data = [NSKeyedArchiver archivedDataWithRootObject:dataArray];    NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.ForeverGuard.TextToday"];    [defaults setObject:data forKey:@"todayModel"];    [defaults synchronize];}

    擷取資料:注意資料存放區需要符合格則NSCoding協議、可儲存的類型、自訂轉Data儲存等。

- (void)readData {    NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.ForeverGuard.TextToday"];    NSData *dataArray = [defaults objectForKey:@"todayModel"];    self.dataArr = [NSKeyedUnarchiver unarchiveObjectWithData:dataArray];    }

  通過在Today介面載入一個TableView,效果

  注意Today和項目共同使用的Model和資源需要設定Target選項:

 

4、點擊Today跳轉到APP

  4.1 設定APP的URL Schemes

  4.2 在Today中的跳轉代碼:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{    [tableView deselectRowAtIndexPath:indexPath animated:YES];    [self.extensionContext openURL:[NSURL URLWithString:[NSString stringWithFormat:@"TextToday://todayModel=%@",@"123"]] completionHandler:nil];}

  :

 

 

 

  

iOS擴充Extension之Today

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.