iOS开发--底部按钮和应用图标显示未读消息

来源:互联网 发布:python 计时功能 编辑:程序博客网 时间:2024/05/17 06:07

我们要实现的效果如下:

 

我们使用系统自带的,实际上,代码量很少,在我们要显示的按钮上,打上下面一句代码即可:

1
self.tabBarItem.badgeValue = @"1";

 同时设置图标和按钮的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
 *  获得未读数
 */
- (void)setupUnreadCount
{
    //获取未读数具体方法
    //最终返回一个数字,如:
    int count=10;
     
    // 设置提醒数字(微博的未读数)
    NSString *status = [NSString stringWithFormat:@"%d", count];
    if ([status isEqualToString:@"0"]) { // 如果是0,得清空数字
        self.tabBarItem.badgeValue = nil;<br>     //应用图标显示
        [UIApplication sharedApplication].applicationIconBadgeNumber = 0;
    else // 非0情况
        self.tabBarItem.badgeValue = status;
        [UIApplication sharedApplication].applicationIconBadgeNumber = status.intValue;
    }
}

当然,设置的显示的这个数字,是应该会定时的变的。如何使这个方法定时的调用呢?

1
2
3
4
5
6
7
8
9
- (void)viewDidLoad
{
    [super viewDidLoad];
     
    // 获得未读数
    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:60 target:self selector:@selector(setupUnreadCount) userInfo:nil repeats:YES];
    // 主线程也会抽时间处理一下timer(不管主线程是否正在其他事件)
    [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
}

做完上面的操作后,我们是可以看到效果了。但还存在一个问题就是,我们的应用进入后台后,定时器不再工作,变成了一个暂时状态。那为什么一个音乐的应用可以一直在后台运行呢?实际上,在AppDelegate里面已经有后台运行的方法,我们在这个方法里做一些操作即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
 *  当app进入后台时调用
 */
- (void)applicationDidEnterBackground:(UIApplication *)application
{
    /**
     *  app的状态
     *  1.死亡状态:没有打开app
     *  2.前台运行状态
     *  3.后台暂停状态:停止一切动画、定时器、多媒体、联网操作,很难再作其他操作
     *  4.后台运行状态
     */
    // 向操作系统申请后台运行的资格,能维持多久,是不确定的
    UIBackgroundTaskIdentifier task = [application beginBackgroundTaskWithExpirationHandler:^{
        // 当申请的后台运行时间已经结束(过期),就会调用这个block
         
        // 赶紧结束任务
        [application endBackgroundTask:task];
    }];
     
    // 在Info.plst中设置后台模式:Required background modes == App plays audio or streams audio/video using AirPlay
    // 搞一个0kb的MP3文件,没有声音
    // 循环播放
     
    // 以前的后台模式只有3种
    // 保持网络连接
    // 多媒体应用
    // VOIP:网络电话
}

 在上面的代码里,我们看到,需要在Info.plst中设置后台模式:Required background modes == App plays audio or streams audio/video using AirPlay,如图:

最后搞一个0kb的MP3,没有声音的,循环播放即可。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小孩子做错事很偏激怎么办 孩子在学校偷钱怎么办 房间墙壁上到处有湿虫怎么办 买了西晒的房子怎么办 墙面瓷砖下水管漏水怎么办 西晒房间开空调没效果怎么办 墙纸被小孩画了怎么办 集成墙板缝隙大怎么办 高血压变低血压怎么办会恢复吗 总是感觉睡不够好困怎么办 两岁宝宝说有鬼怎么办 阳台改成了卧室晒衣服怎么办 室外墙角边墙泥受潮脱落怎么办 新房装修墙体发霉了怎么办 宝宝吃多了发烧怎么办 宝宝睡觉不爱盖被子怎么办 1岁宝宝不盖被子怎么办 2岁宝宝不盖被子怎么办 买的芬琳漆不够刷的怎么办 1.3米宽厨房门怎么办 墙面漆颜色刷深了怎么办 地板上沾了墙漆怎么办 孩子连发高烧8天了怎么办 孩子对数字不敏感怎么办 三岁宝宝不爱学习怎么办 5岁还不认识数字怎么办 小孩上中班还不认识数字怎么办 中班小孩数字都不认识怎么办 中班小孩记不住数字怎么办 中班小孩不肯练数字描红怎么办 2个月吃母乳婴儿缺钙怎么办 月经期接吻水多怎么办 4岁宝宝晚上尿多怎么办 2岁宝宝晚上尿多怎么办 3岁宝宝晚上尿多怎么办 宝宝拉肚子拉绿色的屎怎么办 婴儿吃奶粉大便干燥怎么办 母乳宝宝不拉大便怎么办 我儿子8岁拉肚子怎么办 1岁宝宝经常便秘怎么办 两个月宝宝拉水怎么办