Local Notification

  • 时间:
  • 浏览:2
  • 来源:大发快3官方—UU快三

    self.window.rootViewController = nav;

所以须要做所以必要的操作。比如创建还还有一个多 空的设定notification的土方式 ,等。

7

13

notiTableView.delegate = self;

1

    DLog(@"");

UITableView *notiTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 268, 320, height)];

20

4

11

[saveButton addTarget:self action:@selector(saveAction:) forControlEvents:UIControlEventTouchUpInside];

9

    if (localNotification) {

notiTableView.dataSource = self;

10

        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

10

4

5

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

}

3

上面的UITableView相关的protocol中,暂时指定返回的行数为1,并在返回Cell的土方式 中返回没法 设定任何内容的行。从前,代码就可不并能正常运行。为何让,会不可能 没法 实现必要的protocol土方式 而crash。

7

        [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];

18

textField.borderStyle = UITextBorderStyleRoundedRect;

}

    [self.window makeKeyAndVisible];

15

19

前一天使用了所以dummy的土方式 ,所以为了能让app正常的运行。这里补全所有必要的代码。

2

textField.placeholder = @"Input Text";

1

12

[self.view addSubview:textField];

欢迎加群互相学习,同时进步。QQ群:iOS: 510099570 | Android: 3100987132 | Go:217696290 | Python:3368100185 | 做人要厚道,转载请注明出处!

saveButton.backgroundColor = [UIColor orangeColor];

20

        localNotification.timeZone = [NSTimeZone defaultTimeZone];

8

8

        localNotification.userInfo = @{@"userId": @"best user", @"userName": @"Jack"};

5

13

8

5

18

12

一共分三层,最上面一层是DatePicker。用于选泽出发Local Notification的时间。第二层是还还有一个多 TextField,用于设定Notification的title。最后是设定过的Notification都倒进还还有一个多 TableView里。看看都是哪几种:

这名 前一天,在运行app前一天就会老出 上面给出的效果图。(注意:这里用的是真机运行的app)

19

11

18

9

8

1. 创建项目

17

    return cell;

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

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

    cell.detailTextLabel.text = [n.fireDate description];

17

到这里,就可不并能指定还还有一个多 Local notification在给定的时间触发了。为何让还有有有一种场景,在用户做了某个操作的前一天,notification立刻触发。这时,再用schecule的土方式 就会很奇怪,schedule一秒不可能 赶不上,schedule的秒多了不可能 错过正确的提示时机。所以API里提供了从前土方式 presentNow,提示立刻触发。正确的立刻触发的土方式 是:[[UIApplication sharedApplication] presentLocalNotificationNow:localNotification]。所以初始化和设定相关属性的土方式 都没法 任何的变化。

6

15

4

1

似乎是一切都完美了。notification都是了,可不并能通过界面的DatePicker指定时间,可不并能立即触发,还可不并能指定提示的内容。为何让,还会在“铛”的一声,为何让在app的图标上显示还还有一个多 badge number出来。为何让,当你点击了提示前一天,进入到app里再出来让我发现。。。。。。badge number还是华丽丽的在那里木有消失。是的从前应该点开了notification前一天就消失的,这是为哪几种呢。解决badge number的代码也须你会们都我们都手动的写出来。最后我们都我们都来解决这名 偏离 的功能。

第二种具体情况:

    DLog(@"Received notification %@", notification);

        localNotification.applicationIconBadgeNumber = 1;

}

3. 把设定过的notification都现实在TableView里

}

    }

    application.applicationIconBadgeNumber = 0;

在saveAction土方式 中,设定notification时退出textfield的编辑具体情况并隐藏键盘。所以,须要调用resignFirestResponder土方式 ,[self.textField resignFirstResponder]

就如前文所述,使用NSDate *pickerDate = [self.datePicker date]; 获取到DatePicker中设定的日期,前一天在Local notification对象的fireDate属性里赋值。localNotification.alertBody = self.textField.text设定提示的文本。使用localNotification.userInfo = @{@"userId": @"best user", @"userName": @"Jack"}设定用户信息,都是了你实在有用的信息以字典的土方式 存倒进notification对象中,在所以的前一天可不并能获取这名 字典。最后,最关键的所以使用[[UIApplication sharedApplication] scheduleLocalNotification:localNotification]设定notification在指定的时间触发。

    self.window.backgroundColor = [UIColor whiteColor];

16

        localNotification.fireDate = pickerDate;

5

第有有一种具体情况:

        localNotification.alertAction = @"View";

10

    UILocalNotification *n = notifications[indexPath.row];

这里须要注意到有有一种具体情况:1. 设定好了notification的出发时间前一天,app退出了。这名 退出是说双击home键前一天,上滑了这名 app,终止了app程序运行。2. app还在运行着,你说哪几种是在触发notification的前一天app还在运行中,不可能 app的程序运行还在运行中。

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

10

    UILocalNotification *n = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];

哦了!

3

    

self.textField = textField;

与UI元素对应的,我们都我们都这里有三层,3个界面元素。同事还有Button的还还有一个多 action。同事须要注意的是,我们都我们都须要在Controller里实现UITableViewDelegate和UITableViewDataSource这名 个多 protocol。所以用UITableView这名 个多 protocol须要实现。

- (void)saveAction:(id)sender{

17

        localNotification.alertBody = self.textField.text;

    BVRootViewController *rootViewController = [[BVRootViewController alloc] init];

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

2

9

13

    [self.textField resignFirstResponder];

15

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

        DLog(@"Received notification %@", n);

    return YES;

3

UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(0, 227, 100, 40)];

12

我们都我们都都知道Push Notification,这名 东西须要联网才可不并能用。iOS4起,iPhone6手机手机引入了有有一种可不并能在设备结构引发的notification。不须要复杂化的服务器编程,或所以复杂化的配置。这名 技术所以Local Notification。

14

[self.view addSubview:saveButton];

6

    NSArray *notifications = [[UIApplication sharedApplication] scheduledLocalNotifications];

12

9

16

16

最后

16

7

[self.view addSubview:notiTableView];

3

        [self.notificationTableView reloadData];

[self.view addSubview:datePicker];

2

    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:rootViewController];

Local notificaton可不并能在用户设定里定时触发。甚至,让我设定重发。下面,我们都我们都就来研究下Local Notification,看看怎样设定,查看和解决Local Notification。

18

首先,在DatePicker里设定好时间。前一天在设定notification的内容。最后把指定推送在指定的时间引发。

19

14

    if (n) {

15

20

2

14

    cell.textLabel.text = n.alertBody;

2. 设定notification

    return [[UIApplication sharedApplication] scheduledLocalNotifications].count;

UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 44, 320, 1100)];

6

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

这里是全教程的核心所在了。折腾完正文都是的是基于这里所讲的内容。

17

2

14

13

4

[saveButton setTitle:@" SAVE " forState:UIControlStateNormal];

[[UIApplication sharedApplication] scheduledLocalNotifications]饱含了完正的schedule过了的notification数组,count属性所以数量。在- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath中从notification数组中取出对应元素,显示在UITableView的Cell中,分别是:cell.textLabel.text = n.alertBody, cell.detailTextLabel.text = [n.fireDate description]。

11

11

6

{

UIButton *saveButton = [[UIButton alloc] initWithFrame:CGRectMake(155, 227, 1100, 40)];

3

    application.applicationIconBadgeNumber = 0;

        localNotification.soundName = UILocalNotificationDefaultSoundName;

CGFloat height = [UIScreen mainScreen].bounds.size.height - 242;

1

1

    }

4

    总体来说是没法 个效果:

7

}

    }

    if (!cell) {

    NSDate *pickerDate = [self.datePicker date];