你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS開辟之widget完成詳解

iOS開辟之widget完成詳解

編輯:IOS開發綜合

媒介

    IOS extension的湧現,便利了用戶檢查運用的辦事,好比用戶可以在Today的widgets中檢查運用的簡單信息,然後點擊進入相干的運用界面。
暫且不表收集上現有的widget文章,本篇文章重要解釋自己詳細完成widget的步調,願望可以或許贊助到須要完成widget的同業同伙。


文章將順次從以下幾個成績著手,停止具體解釋:
1、若何為現有的工程添加widget;
2、若何繪制UI;
3、若何調起app;
4、若何與host app同享數據。
添加Today Extension

如圖,為現有的工程添加Today Extension,定名這裡不贅述了,年夜家都懂的。


    這是添加Today Extension以後的工程目次。
    到這裡,為現有的工程添加Today Extension算是完成了,運轉法式便可以看到相似圖1的簡略的後果了,很簡略哈。

繪制UI

    與網上揭橥文章的童鞋們一樣,我也是個代碼控(裝B一下),習氣用純代碼來繪制Today的UI。


    這裡,刪除默許創立的MainInterface.storyboard,並按圖4所示修正Info.plist文件。(固然,習氣應用storyboard的童鞋可以略過,直接操作storyboard便可)

    起首,設置widget展現視圖的年夜小。關於widget的配景色,和詳細展現的內容年夜家按需繪制,這裡暫且不表。



    運轉法式後,會發明一個成績:繪制的內容與左邊界限有必定間隔(約30px)。若何處理這個成績呢,如圖6所示,TodayViewController遵照的NCWidgetProviding協定給出懂得決計劃。

調起app

    由於extension和containing app是兩個完整自力的過程,所以它們之間不克不及直接通訊(不克不及像運用外部點擊按鈕,跳轉到指定頁面)。為了完成widget調起app,這裡經由過程openURL的方法來啟動containing app。

- (void)openURLContainingAPP{
 //經由過程extensionContext借助host app調起app
 [self.extensionContext openURL:[NSURL URLWithString:@"appextension://xxx"] completionHandler:^(BOOL success) { 
 NSLog(@"open url result:%d",success); 
 }];
}

數據同享

    經由過程App Groups供給的統一group內app配合讀寫區域,可以用NSUserDefaults和NSFileManager兩種方法完成extension和containing app之間的數據同享。

1 經由過程NSUserDefaults同享數據

保留數據

- (void)saveDataByNSUserDefaults{ 
 NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@"group.c
om.xxx"];
 [shared setObject:@"asdfasdf" forKey:@"widget"]; 
 [shared synchronize];
}

讀取數據

- (NSString *)readDataFromNSUserDefaults{ 
 NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@"group.c
om.xxx"]; 
 NSString *value = [shared valueForKey:@"widget"]; 
 return value;
}

2 經由過程NSFileManager同享數據

保留數據

- (BOOL)saveDataByNSFileManager{ 
 NSError *err = nil; 
 NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecuri
tyApplicationGroupIdentifier:@"group.com.xxx"]; 
 containerURL = [containerURL URLByAppendingPathComponent:@"Library/Caches/
widget"]; 
 NSString *value = @"asdfasdfasf"; 
 BOOL result = [value writeToURL:containerURL atomically:YES encoding:NSUTF8StringEncoding error:&err];
 if (!result) { 
 NSLog(@"%@",err); 
 } else { 
 NSLog(@"save value:%@ success.",value); 
 } 
 return result;
}

讀取數據

- (NSString *)readDataByNSFileManager{ 
 NSError *err = nil;
 NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecuri
tyApplicationGroupIdentifier:@"group.com.xxx"]; 
 containerURL = [containerURL URLByAppendingPathComponent:@"Library/Caches/
widget"]; 
 NSString *value = [NSString stringWithContentsOfURL:containerURL encoding:
NSUTF8StringEncoding error:&err]; 
 return value;
}

到這裡,在Today中添加運用的widget就完成了,從Today中可以閱讀預設的快捷辦事,在文章IOS 10 Today Widget中接著說IOS 10的適配成績。

以上就是本文的全體內容,願望對年夜家的進修有所贊助,也願望年夜家多多支撐本站。

【iOS開辟之widget完成詳解】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved