媒介
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完成詳解】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!