2011-11-04 73 views
9
UILocalNotification *notif = [[cls alloc] init]; 
notif.fireDate = [self.datePicker date]; 
notif.timeZone = [NSTimeZone defaultTimeZone]; 

notif.alertBody = @"Did you forget something?"; 
notif.alertAction = @"Show me"; 

如果用戶點擊「showme」,應用程序應該打開並且他應該得到警報。 我應該在哪裏寫代碼?如果可能有人請給我的代碼一點點UILocalNotification的警報動作代碼

回答

24

您將獲得這取決於應用程序的狀態,在該通知被觸發時兩個地有關UILocalNotification通知。

1.在應用程序:didFinishLaunchingWithOptions:方法,如果該應用程序既不運行也不在後臺。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

    ... 
    UILocalNotification *localNotif = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey]; 
    if (localNotif) {  
     // Show Alert Here 
    } 
    ... 
} 

2.In 應用:didReceiveLocalNotification:如果方法該應用正在運行或在後臺。它在應用程序已經運行時顯示警報幾乎毫無用處。因此,只有當應用程序在通知被觸發時處於後臺時才必須顯示警報。要知道應用程序是否從後臺恢復,請使用應用程序將輸入的地址:方法。

- (void)applicationWillEnterForeground:(UIApplication *)application { 

    isAppResumingFromBackground = YES; 
} 

使用這個可以顯示警報在didReceiveLocalNotification:只有方法時,該應用程序從後臺恢復。

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { 

    if (isAppResumingFromBackground) { 

     // Show Alert Here 
    } 
} 

您可以簡單地忽略如果條件如果要顯示警報的認識,而應用程序的狀態的通知解僱所有的時間

+0

感謝警報正在正常工作.....但文本要顯示在該警報是從其他視圖控制器,爲什麼它不工作??'application.applicationIconBadgeNumber = 0; \t NSString * reminderText = [notification.userInfo objectForKey:kRemindMeNotificationDataKey]; \t [viewController showReminder:reminderText]; – Chandu

+0

顯示提醒是我寫在另一個視圖控制器的方法,但我不知道爲什麼它不被稱爲 – Chandu

+0

好方法來處理本地notif。你建議將'isAppResumingFromBackground'設置爲'YES'嗎?有些地方會在'application:didReceiveLocalNotification:'之後調用,但會在應用程序恢復的任何情況下調用。 – dvkch

0

有一個叫didreceivelocalnotification.You的委託方法在應用delegate.And寫這個,當用戶點擊那麼這個代表方法將被調用。因此,在didreceivelocalnotifaction方法中編寫任何代碼。

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { 
} 
+0

- (無效)應用:(UIApplication的*)應用 didReceiveLocalNotification:(UILocalNotification *)通知{ \t \t application.applicationIconBadgeNumber = 0; \t的NSString * reminderText = [notification.userInfo \t \t \t \t \t \t \t objectForKey:kRemindMeNotificationDataKey]; \t [viewController showReminder:reminderText]; } – Chandu

+0

我已經寫了這個,但我不知道爲什麼這個showReminder方法沒有被調用 – Chandu

+0

檢查該方法是否調用? – Tendulkar

4

添加一個功能,我們將調用按鈕的YourViewController.h文件中的觸摸,然後給身體的YourViewController.m該函數文件

-(void)Trigger_LocalNotification 
{ 
    [[UIApplication sharedApplication] cancelAllLocalNotifications]; 

    UILocalNotification *_localNotification = [[UILocalNotification alloc]init]; 

     //setting the fire dat of the local notification 
    _localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:5]; 


    //setting the time zone 
    _localNotification.timeZone = [NSTimeZone defaultTimeZone]; 

    //setting the message to display 
    _localNotification.alertBody = @"Did you forget something?"; 

    //default notification sound 
    _localNotification.soundName = UILocalNotificationDefaultSoundName; 

    //displaying the badge number 
    _localNotification.applicationIconBadgeNumber = [[UIApplication sharedApplication]applicationIconBadgeNumber]+1; 

    //schedule a notification at its specified time with the help of the app delegate 
    [[UIApplication sharedApplication]scheduleLocalNotification:_localNotification]; 

} 

第一行的代碼將刪除系統中的所有本地通知(如果已聲明)。在第二行中,我正在初始化UILocalNotification變量,在第三行中,我使用fireDate屬性來設置此本地通知將觸發的時間,並且您可以看到通知將在5秒後觸發。

的soundName是用來播放聲音時,通知被觸發並在應用內觸發這個本地通知也沒有激活,在這種情況下,一個警告框會彈出默認通知UILocalNotification類的屬性聲音並使用屬性alertBody寫入警報消息。代碼的最後一行會將此通知與系統相關聯。

確保安裝與按鈕此功能潤色內 事件

[btn addTarget:self action:@selector(Trigger_LocalNotification) forControlEvents:UIControlEventTouchUpInside]; 

現在選擇項目的應用Delegate.m文件,並創建該類的對象(YourViewController)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Override point for customization after application launch. 
    YourViewController *obj = [[YourViewController alloc]init]; 
    [self.window addSubview:obj.view]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

運行應用程序,當應用程序在模擬器啓動然後快速按home鍵看到警告框在5秒後發出本地通知。

我希望這個答案能幫助你學習如何實現UILocalNotification。

+0

警報措施呢?在我的情況下,如果用戶點擊該動作按鈕,應用程序應該到達前臺,並且用戶應該看到一個警報(不是帶有alertbody和警報動作的警報) – Chandu