2011-11-04 19 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"; 

se l'utente fa clic su "showme" l'app dovrebbe aprirsi e dovrebbe ricevere l'avviso. Dove devo scrivere questo codice? E se possibile qualcuno mi dia un po 'di codiceCodice per l'azione di avviso di UILocalNotification

risposta

24

Si otterrà la notifica circa l'UILocalNotification in due punti a seconda dello stato di applicazione al momento della notifica viene licenziato.

1.In applicazione: didFinishLaunchingWithOptions: metodo, se l'app non è né in esecuzione né in background.

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

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

2.In applicazione: didReceiveLocalNotification: metodo se l'applicazione è in esecuzione o in background. È quasi inutile mostrare l'avviso quando l'app è già in esecuzione. Quindi devi mostrare l'avviso solo quando l'app era in background al momento della notifica. Per sapere se l'app sta riprendendo dallo sfondo, utilizzare il metodo applicationWillEnterForeground:.

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

    isAppResumingFromBackground = YES; 
} 

Usando questo è possibile mostrare l'avviso in didReceiveLocalNotification: solo metodo quando l'applicazione sta riprendendo dallo sfondo.

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

    if (isAppResumingFromBackground) { 

     // Show Alert Here 
    } 
} 

Si può semplicemente omettere il condizione If se si desidera visualizzare la vista di allarme per tutto il tempo la notifica viene sparato indipendentemente dallo stato della app.

+0

grazie all'allarme funziona bene ora ..... Ma il testo da visualizzare in tale avviso proviene da un altro controller di visualizzazione e perché non funziona ??. 'application.applicationIconBadgeNumber = 0; \t NSString * reminderText = [notification.userInfo objectForKey: kRemindMeNotificationDataKey]; \t [viewController showReminder: reminderText]; – Chandu

+0

show promemoria è il metodo che ho scritto nell'altro controller della vista, ma non so perché non è stato chiamato – Chandu

+0

come modo per gestire il notif locale. Suggerite qualche posto per impostare 'isAppResumingFromBackground' su' YES'? Qualche posto verrà chiamato dopo l'applicazione: didReceiveLocalNotification: 'ma verrà richiamato in qualsiasi caso l'app riprenda. – dvkch

0

c'è un metodo delegato chiamato didreceivelocalnotification. Devi scrivere questo nel delegato dell'app.E quando l'utente fa clic su questo delegato il metodo sarà chiamato. Quindi scrivi qualsiasi codice nel metodo didreceivelocalnotifaction.

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

- (void) applicazione: (UIApplication *) applicazione didReceiveLocalNotification: (UILocalNotification *) notifica { \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

Ho scritto questo ma non so perché questo metodo showReminder non viene chiamato – Chandu

+0

controllare se quel metodo sta chiamando o no? – Tendulkar

4

Aggiungere una funzione che chiameremo il tocco di un pulsante all'interno del file YourViewController.h e poi dare il corpo a tale funzione nel YourViewController.m presentare

-(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]; 

} 

La prima linea del codice rimuove tutte le notifiche locali dal sistema se sono dichiarate. Nella seconda riga sto inizializzando la variabile UILocalNotification e nella terza riga sto usando la proprietà fireDate per impostare l'ora in cui questa notifica locale verrà attivata e, come puoi vedere, la notifica verrà attivata dopo 5 secondi.

The soundName è una proprietà della classe UILocalNotification che viene utilizzata per riprodurre un suono quando la notifica viene attivata e quando l'applicazione che attiva questa notifica locale non è attiva, in tal caso verrà visualizzata una finestra di avviso con la notifica predefinita suono e il messaggio di avviso è scritto usando la proprietà alertBody. L'ultima riga del codice allegherà questa notifica al sistema.

assicurarsi di allegare questa funzione con il pulsante a sfioramento dentro evento

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

Ora selezionate il file App Delegate.m del progetto e creare l'oggetto di questa classe (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; 
} 

Eseguire l'applicazione e quando l'applicazione viene avviata nel simulatore, quindi premere rapidamente il tasto home per vedere la finestra di avviso della notifica locale dopo 5 sec.

Spero che questa risposta ti abbia aiutato nell'imparare come implementare UILocalNotification.

+0

E l'azione di avviso ??? nel mio caso se l'utente fa clic su quel pulsante di azione l'applicazione dovrebbe venire in primo piano e l'utente dovrebbe vedere un avviso (non quello con la segnalazione e l'azione di avviso) – Chandu

Problemi correlati