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

si el usuario hace clic en "showme" la aplicación debería abrirse y él debería recibir la alerta. dónde debería escribir el código? Y si es posible que alguien por favor, dame un poco de códigoCódigo de acción de alerta de UILocalNotification

Respuesta

24

Recibirá la notificación acerca de UILocalNotification en dos lugares dependiendo del estado de la aplicación en el momento en que se active la notificación.

1.In aplicación: didFinishLaunchingWithOptions: método, si la aplicación no se está ejecutando ni en segundo plano.

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

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

2.In aplicación: didReceiveLocalNotification: método si la aplicación es ya sea corriendo o en el fondo. Es casi inútil mostrar la alerta cuando la aplicación ya se está ejecutando. Por lo tanto, debe mostrar la alerta solo cuando la aplicación estaba en segundo plano en el momento en que se activó la notificación. Para saber si la aplicación se está reanudando desde el fondo, use el método de la aplicación WillEnterForeground:.

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

    isAppResumingFromBackground = YES; 
} 

El uso de este se puede mostrar la alerta en didReceiveLocalNotification: Sólo método cuando la aplicación está reanudando de fondo.

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

    if (isAppResumingFromBackground) { 

     // Show Alert Here 
    } 
} 

Usted puede simplemente omitir el si condición si desea mostrar la vista de alerta todo el tiempo de la notificación se dispara independientemente del estado de la aplicación.

+0

gracias a que la alerta funciona bien ahora ..... Pero el texto para mostrarse en esa alerta es de otro controlador de vista y por qué no funciona ??. 'application.applicationIconBadgeNumber = 0; \t NSString * reminderText = [notification.userInfo objectForKey: kRemindMeNotificationDataKey]; \t [viewController showReminder: reminderText]; – Chandu

+0

mostrar recordatorio es el método que escribí en el otro controlador de vista, pero no sé por qué no se llama – Chandu

+0

buena manera de lidiar con notif local. ¿Sugiere algún lugar para establecer 'isAppResumingFromBackground' en' YES'? En algún lugar se llamará después de 'application: didReceiveLocalNotification:' pero se invocará en cualquier tipo de caso en que la aplicación se reanude. – dvkch

0

hay un método delegado pidió didreceivelocalnotification.You tiene que escribir esto en el delegate.And aplicación cuando el usuario hace clic a continuación, este delegado método va a llamar.Así que escriba cualquier código en el método did notivelocalnotifaction.

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

- (void) aplicación: (UIApplication *) aplicación didReceiveLocalNotification: (UILocalNotification *) de notificación { \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

He escrito esto, pero no sé por qué este método showReminder no se llama – Chandu

+0

verifica si ese método está llamando o no? – Tendulkar

4

Añadir una función que llamaremos en el toque de un botón dentro del archivo YourViewController.h y luego darle al cuerpo a esa función en el YourViewController.m presentar

-(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 primera línea del código elimina todas las notificaciones locales del sistema si se declaran. En la segunda línea, estoy inicializando la variable UILocalNotification y en la tercera línea estoy usando la propiedad fireDate para establecer la hora en que se activará esta notificación local y, como puede ver, la notificación se activará después de 5 segundos.

El soundName es una propiedad de la clase UILocalNotification que se utiliza para reproducir un sonido cuando se activa la notificación y cuando la aplicación que activa esta notificación local no está activa, en ese caso aparecerá un cuadro de alerta con la notificación predeterminada sonido y el mensaje de alerta está escrito usando la propiedad alertBody. La última línea del código adjuntará esta notificación al sistema.

asegúrese de conectar esta función con el botón táctil en el interior caso

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

A continuación, seleccione el archivo de la aplicación Delegate.m de su proyecto y crear el objeto de esta clase (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; 
} 

Ejecute la aplicación y cuando la aplicación se inicie en el simulador, presione rápidamente el botón de inicio para ver el cuadro de alerta de la notificación local después de 5 seg.

Espero que esta respuesta te haya ayudado a aprender cómo implementar UILocalNotification.

+0

¿Qué pasa con la acción de alerta? en mi caso, si el usuario hace clic en ese botón de acción, la aplicación debe ponerse en primer plano y el usuario debería ver una alerta (no la que tiene alertbody y acción de alerta) – Chandu

Cuestiones relacionadas