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

, jeśli użytkownik kliknie "showme", aplikacja powinna się otworzyć i powinien otrzymać alert. Gdzie powinienem napisać ten kod? I jeśli to możliwe, proszę podać mi trochę koduKod działania alertu o UILocalNotification

Odpowiedz

24

Otrzymasz powiadomienie o UILocalNotification w dwóch miejscach w zależności od stanu aplikacji w momencie uruchomienia powiadomienia.

1.W aplikacji : didFinishLaunchingWithOptions: metoda, jeśli aplikacja nie działa ani nie działa w tle.

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

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

2.In zastosowanie: didReceiveLocalNotification: metoda jeśli aplikacja jest albo pracuje lub w tle. Jego prawie bezużyteczne wyświetlanie alertu, gdy aplikacja jest już uruchomiona. Musisz więc wyświetlać alert tylko wtedy, gdy aplikacja była w tle w momencie uruchomienia powiadomienia. Aby dowiedzieć się, czy aplikacja jest wznawiana z tła, użyj metody WillEnterForeground:.

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

    isAppResumingFromBackground = YES; 
} 

Stosując ten sposób można pokazać alert w didReceiveLocalNotification: tylko metoda, gdy aplikacja jest wznowienie od tła.

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

    if (isAppResumingFromBackground) { 

     // Show Alert Here 
    } 
} 

można po prostu pominąć jeśli warunek jeśli chcesz pokazać alert Wyświetl wszystkie czas notyfikacja jest zwolniony niezależnie od stanu aplikacji.

+0

dzięki temu alarm działa dobrze teraz ..... Ale tekst być wyświetlane w tym alarmie jest z innego kontrolera widoku i dlaczego nie działa?. 'application.applicationIconBadgeNumber = 0; \t NSString * reminderText = [notification.userInfo objectForKey: kRemindMeNotificationDataKey]; \t [viewController showReminder: reminderText]; – Chandu

+0

Przypomnienie o wyświetleniu to metoda, którą napisałem w innym kontrolerze widoku, ale nie wiem, dlaczego nie nazywa się – Chandu

+0

dobrym sposobem radzenia sobie z lokalnym powiadomieniem. Czy sugerujesz jakieś miejsce, aby ustawić 'isAppResumingFromBackground' na' YES'? Niektóre miejsca będą wywoływane po 'application: didReceiveLocalNotification:', ale będą wywoływane w każdym przypadku, gdy aplikacja zostanie wznowiona. – dvkch

0

jest to metoda delegowana zwana didreceivelocalnotification.Musisz to zapisać w delegacie aplikacji. I kiedy użytkownik kliknie, to ten delegat metoda będzie wywoływać. Aby napisać dowolny kod w metodzie didreceivelocalnotifaction.

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

- (void) Zastosowanie: (UIApplication *) zastosowanie didReceiveLocalNotification (UILocalNotification *) Zgłoszenie { \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

Napisałem to, ale nie wiem, dlaczego ta metoda showReminder nie jest wywoływana – Chandu

+0

Sprawdź, czy ta metoda dzwoni, czy nie? – Tendulkar

4

Dodaj funkcję, która będzie wzywamy naciśnięciem przycisku wewnątrz pliku YourViewController.h a następnie dać organizmowi tej funkcji w YourViewController.m złożyć

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

} 

Pierwsza linia kodu usuwa wszystkie lokalne powiadomienia z systemu, jeśli są zadeklarowane. W drugim wierszu inicjalizuję zmienną UILocalNotification iw trzeciej linii używam właściwości fireDate, aby ustawić czas, kiedy to powiadomienie lokalne zostanie uruchomione i jak widać, powiadomienie zostanie uruchomione po 5 sekundach.

Nazwa dźwięku to właściwość klasy UILocalNotification, która jest używana do odtwarzania dźwięku po uruchomieniu powiadomienia i gdy aplikacja uruchamiająca to powiadomienie lokalne nie jest aktywna, w takim przypadku zostanie wyświetlone okno alertu z powiadomieniem domyślnym dźwięk i komunikat ostrzegawczy jest zapisywany przy użyciu właściwości alertBody. Ostatni wiersz kodu dołącza to powiadomienie do systemu.

upewnij się, aby dołączyć tę funkcję za pomocą przycisku dotknąć wewnątrz imprezy

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

Teraz wybierz plik App Delegate.m swojego projektu i utworzyć obiekt tej klasy (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; 
} 

Uruchom aplikację i po uruchomieniu aplikacji w symulatorze, a następnie szybko naciśnij przycisk strony głównej, aby wyświetlić okno alertu powiadomienia lokalnego po 5 sekundach

Mam nadzieję, że ta odpowiedź pomogła wam w nauczeniu się wdrażania UILocalNotification.

+0

Co o działaniu alarmu ??? w moim przypadku, jeśli użytkownik kliknie ten przycisk akcji, aplikacja powinna wyjść na pierwszy plan, a użytkownik powinien zobaczyć alert (nie ten z alarmem i alertem) – Chandu

Powiązane problemy