UILocalNotification的警报行动代码

时间:2011-11-04 11:00:00

标签: iphone objective-c ios xcode

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”应用程序应该打开,他应该收到警报。 我应该在哪里写这个代码?如果可能的话,有人请给我一些代码

3 个答案:

答案 0 :(得分:24)

根据应用程序触发通知时的状态,您将在两个地方收到有关 UILocalNotification 的通知。

1.在应用程序:didFinishLaunchingWithOptions:方法中,如果应用既未运行也未在后台运行。

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

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

2.在应用程序:didReceiveLocalNotification:方法中,如果应用程序正在运行或在后台运行。当应用程序已经运行时,显示警报几乎没用。因此,只有在通知触发时应用程序处于后台时才必须显示警报。要知道应用程序是否从后台恢复,请使用 applicationWillEnterForeground:方法。

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

    isAppResumingFromBackground = YES;
}

使用此功能,只有当应用程序从后台恢复时,您才能在 didReceiveLocalNotification:方法中显示警报。

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

    if (isAppResumingFromBackground) {

        // Show Alert Here
    }
}

如果要在通知被触发时显示警报视图,您可以简单地省略 if-condition 。无论应用程序的状态如何。

答案 1 :(得分: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];

现在选择项目的App 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;
}

运行应用程序,当应用程序在模拟器中启动时,然后快速按主页按钮,在5秒后看到本地通知的警告框。

我希望这个答案能帮助你学习如何实现UILocalNotification。

答案 2 :(得分:0)

有一个名为didreceivelocalnotification的委托方法。你必须在app delegate中写这个。当用户点击时,这个委托方法将会调用。所以在didreceivelocalnotifaction方法中写任何代码。

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