cell业务逻辑处理(时间格式化)

一.点击更多按钮

1.项目需求
点击更多按钮,从底部弹出一个框

t'p

2.怎么从底部弹出一个框?
两种方法:
一种用 UIActionSheet
另一种用 UIAlertController

2.1 使用UIActionSheet
好处: 不需要控制器,直接就能使用
缺点: 方法过期了,监听按钮的点击比较麻烦

 源代码:
// 以后只要发现有可变参数,最后一定要添加nil
UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:nil delegate:nil cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles:@"收藏",@"举报",nil];

[sheet showInView:self];

2.2 使用UIAlertController
好处:能方法监听按钮的点击
缺点:代码要写很多,依赖控制器(需要控制器modal出来)

2.3 使用UIAlertController需要使用通知,通知最近的控制器把UIAlertController modal出来
注意:使用通知,当控制器销毁的时候,一定要移除通知

2.4 为什么使用通知,不使用代理?
通知可以跨级传递消息
代理,一般是上下级来传递消息

3.怎么能快速拿到一个控制器?
全局有一个单例 UIApplication,通过这个单例我们能拿到窗口的跟控制器

  // 以后只要想快速拿控制器,拿窗口根控制器
[UIApplication sharedApplication].keyWindow.rootViewController;

二.发布帖子的时间处理

1.时间处理的业务逻辑分析

1.1先判断是否是今年的帖子,如果不是今年,就显示 2015-08-06 21:10:08 这种格式

1.2如果是今年,在判断是否是今天,如果是今天 在判断有没有超过一个小时,超过一个小时 就显示 多少小时前 这种格式

1.3如果不超过一小时,判断有没有超过2分钟 超过两分钟 就显示 多少分钟前 这种格式

1.4 如果不超过两分钟,就显示 刚刚 这种格式

1.5 如果时间超过一天,在判断有没有超过一天 如果没有 就显示 昨天 21:10这种格式

1.6 如果时间超过一天 就显示 08-05 21:10:08这种格式

2.由于业务逻辑非常深,写代码的时候,容易搞混,怎么处理?

 我们可以采取先写伪代码,理清思路,再转换为真实代码
 什么是伪代码:伪代码就是中文和代码的结合写出来的代码

伪代码示例
 // 处理时间(用帖子发布时间与当前时间比较)
if (今年) {
    if (今天) {

        if (大于1小时) {

        } else if (大于2分钟) {

        } else { // 刚刚

        }

    } else if (昨天) {

    } else { // 昨天之前

    }

} else{ // 非今年

}

3.怎么获取时间差值?

3.1 先把字符串对象的日期转换成 日期对象的日期格式
3.1.1 获取 NSDateFormatter对象,用来 NSStreing与NSDate互转
3.1.2 设置日期格式(转换成什么格式的日期)
3.1.3 把字符串日期, 转换成特定格式的日期

4.判断是否是今年

4.1 怎么判断?
判断年份是否相同

4.2 怎么获取日期年份,或月份,等等?
可以通过日历类来拿到日期组件,就可以获得年,月日和时分秒了

处理日期格式原码

// 1.把帖子发布时间字符串转换成(NSDate)日期对象 => NSDateFormatter
// NSDateFormatter:NSStreing与NSDate互转
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
// 设置格式
fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";
// 发布日期对象
NSDate *createDate = [fmt dateFromString:item.create_time];

// 获取日历类对象
 // NSCalendar *calendar = [NSCalendar currentCalendar];
// 获取日期组件
 // NSDateComponents *cmp = [calendar components:NSCalendarUnitHour | NSCalendarUnitMinute  fromDate:createDate toDate:[NSDate date] options:NSCalendarWrapComponents];

NSString *timeStr = item.create_time;
if ([createDate isThisYear]) {
    if ([createDate isThisToday]) {

        // 获取日期差值
        if (cmp.hour >= 1) {
            timeStr = [NSString stringWithFormat:@"%ld小时前",cmp.hour];
        } else if (cmp.minute >= 2) {
            timeStr = [NSString stringWithFormat:@"%ld分钟前",cmp.minute];
        } else { // 刚刚
            timeStr = @"刚刚";
        }
    } else if ([createDate isThisYesterday]) { // 昨天
        // 昨天 21:10
        fmt.dateFormat = @"昨天 HH:mm";
        timeStr = [fmt stringFromDate:createDate];

    } else { // 昨天之前 08-05 21:10:08
        fmt.dateFormat = @"MM-dd HH:mm:ss";
        timeStr = [fmt stringFromDate:createDate];
    }
}

因为判断日期要常用,我们就把判断方法抽取到NSDate的分类

- (BOOL)isThisYear
{
// 获取当前日期对象
NSDate *curDate = [NSDate date];
// 获取日历类
NSCalendar *curCalendar = [NSCalendar currentCalendar];
// 获取自己日期组件(年,月,等)   self代码外面调用这个方法的日历类(也就是createDate)
NSDateComponents *selfCmp = [curCalendar components:NSCalendarUnitYear fromDate:self];
// 获取当前时间日期组件(年,月,等)
NSDateComponents *curCmp = [curCalendar components:NSCalendarUnitYear fromDate:curDate];
return  curCmp.year == selfCmp.year;
}

// 判断是否是今天
- (BOOL)isThisToday
{
// 获取日历类
NSCalendar *curCalendar = [NSCalendar currentCalendar];
return [curCalendar isDateInToday:self];
}

- (BOOL)isThisYesterday
{
NSCalendar *curCalendar = [NSCalendar currentCalendar];
return [curCalendar isDateInYesterday:self];

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,340评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,762评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,329评论 0 329
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,678评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,583评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,995评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,493评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,145评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,293评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,250评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,267评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,973评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,556评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,648评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,873评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,257评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,809评论 2 339

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,975评论 4 60
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,830评论 6 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,559评论 18 139
  • 陈凡还跟我们说,这起案子,恐怕真的是云清做的,否则云清不应该在这个时候不见踪影。陈凡告诉我们,警方去云清的新住宅,...
    苍新阅读 607评论 4 4
  • 他一直就有一个穿上绿军装保家卫国的宏伟理想。可由于种种原因,一直到他成为了一个父亲的时候,他的理想也未能实...
    蒹葭essay阅读 247评论 0 0