本文將為大家闡明IOS開發中UILocalNotification本地告訴完成復雜的提示功用的闡明,詳細操作請看面的內容
這段時間項目要求做一個相似的鬧鐘提示功用,對告訴不太熟習的我,決議先用到xcode自帶的本地告訴試試,最終成功的完成了功用,特整理分享下。
它的表現特點:
app封閉的時分也能接納和顯示告訴。
app處於後台的時分能接納告訴也能顯示。
app處於前台的時分能接納,但不能顯示,但是會走使用順序delegate中的辦法
詳細的創立辦法:
-》創立一個本地告訴對象UILocalNotification
-》設置fireDate,AlertBody,AlertAction,soundName,applicationBadgeNumber,repeatInterval,alertLanuchImage屬性
-》配置告訴參數,userInfo。及告訴的內容。我們可以在接納告訴的辦法中獲取該對象。
-》調用告訴,運用UIApplication的單例對象scheduleLocalNotificaiton依照方案啟動告訴
此處需求留意的是自從IOS8之後需求征求用戶的告訴,假如贊同則創立UIUerNotificationSettings,然後 registerUserNotificationSettings。對本地告訴的數量限制,IOS最多允許最近本地告訴數量是64個,超越限制的本地告訴將被iOS疏忽。
上面就是詳細的代碼:
1.注冊告訴 ,異樣也適用於iOS10
在appdelegate的application:didFinishLaunchingWithOptions:中調用上面的辦法
另外補充:為了適配iOS10,下面的代碼最好是換成上面的
2.本地告訴的定義和運用
在需求運用本地告訴的控制器定義,這裡為了簡便直接定義一個5s之後的鬧鐘,可以改成恣意一個時間點的,轉換成NSDate類型交換[NSDate dateWithTimeIntervalSinceNow:5]即可。
為了區分不同的本地告訴,可以在定義的同時定義上面的屬性
//設置告訴的相關信息,這個很重要,可以添加一些標志性內容,方便當前區分和獲取告訴的信息 NSDictionary *infoDic = [NSDictionary dictionaryWithObjectsAndKeys:LOCAL_NOTIFY_SCHEDULE_ID,@"id", nil]; localNotification.userInfo = infoDic;
3.取消本地告訴
留意::在每次不需求或許重新刷新一切的本地告訴之前必需先取消一切的本地告訴,不然會有反復的相反的告訴。
//取消某一個告訴 NSArray *notificaitons = [[UIApplication sharedApplication] scheduledLocalNotifications]; //獲取以後一切的本地告訴 if (!notificaitons || notificaitons.count <= 0) { return; } for (UILocalNotification *notify in notificaitons) { if ([[notify.userInfo objectForKey:@"id"] isEqualToString:LOCAL_NOTIFY_SCHEDULE_ID]) { //取消一個特定的告訴 [[UIApplication sharedApplication] cancelLocalNotification:notify]; break; } } //取消一切的本地告訴 [[UIApplication sharedApplication] cancelAllLocalNotifications];
4.本地告訴的呼應
假如曾經注冊了本地告訴,當客戶端呼應告訴時:
a、使用順序在後台的時分,本地告訴會給設備送達一個和近程告訴一樣的提示
b、使用順序正在運轉中,則設備不會收到提示,但是會走使用順序delegate中的辦法:
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { }
假如你想完成順序在後台時分的那種提示效果,可以在下面這個辦法中添加相關代碼
if ([[notification.userInfo objectForKey:@"id"] isEqualToString:LOCAL_NOTIFY_SCHEDULE_ID]) { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"test" message:notification.alertBody delegate:nil cancelButtonTitle:@"封閉" otherButtonTitles:notification.alertAction, nil nil]; [alert show]; }
需求留意的是,在狀況a中,假如用戶點擊提示進入使用順序,也會執行收到本地告訴的回調辦法,這種狀況下假如你添加了下面那段代碼,則會呈現延續呈現兩次提示,為理解決這個問題,修正代碼如下:
if ([[notification.userInfo objectForKey:@"id"] isEqualToString:LOCAL_NOTIFY_SCHEDULE_ID]) { //判別使用順序以後的運轉形態,假如是激活形態,則停止提示,否則不提示 if (application.applicationState == UIApplicationStateActive) { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:notification.alertBody delegate:nil cancelButtonTitle:@"封閉" otherButtonTitles:nil, nil]; [alert show]; } }
假如適配了iOS10,則還應該加上上面的
【iOS開發中UILocalNotification本地告訴完成復雜的提示功用】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!