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

一.点击更多按钮

1.项目需求

点击更多按钮,从底部弹出一个框

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  // 1.把帖子发布时间字符串转换成(NSDate)日期对象 => NSDateFormatter
 2     // NSDateFormatter:NSStreing与NSDate互转
 3     NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
 4     // 设置格式
 5     fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";
 6     // 发布日期对象
 7     NSDate *createDate = [fmt dateFromString:item.create_time];
 8
 9     // 获取日历类对象
10    // NSCalendar *calendar = [NSCalendar currentCalendar];
11     // 获取日期组件
12    // NSDateComponents *cmp = [calendar components:NSCalendarUnitHour | NSCalendarUnitMinute  fromDate:createDate toDate:[NSDate date] options:NSCalendarWrapComponents];
13
14     NSString *timeStr = item.create_time;
15     if ([createDate isThisYear]) {
16         if ([createDate isThisToday]) {
17
18             // 获取日期差值
19             if (cmp.hour >= 1) {
20                 timeStr = [NSString stringWithFormat:@"%ld小时前",cmp.hour];
21             } else if (cmp.minute >= 2) {
22                 timeStr = [NSString stringWithFormat:@"%ld分钟前",cmp.minute];
23             } else { // 刚刚
24                 timeStr = @"刚刚";
25             }
26         } else if ([createDate isThisYesterday]) { // 昨天
27             // 昨天 21:10
28             fmt.dateFormat = @"昨天 HH:mm";
29             timeStr = [fmt stringFromDate:createDate];
30
31         } else { // 昨天之前 08-05 21:10:08
32             fmt.dateFormat = @"MM-dd HH:mm:ss";
33             timeStr = [fmt stringFromDate:createDate];
34         }
35     }
36
37 因为判断日期要常用,我们就把判断方法抽取到NSDate的分类
38
39 - (BOOL)isThisYear
40 {
41     // 获取当前日期对象
42     NSDate *curDate = [NSDate date];
43     // 获取日历类
44     NSCalendar *curCalendar = [NSCalendar currentCalendar];
45     // 获取自己日期组件(年,月,等)   self代码外面调用这个方法的日历类(也就是createDate)
46     NSDateComponents *selfCmp = [curCalendar components:NSCalendarUnitYear fromDate:self];
47     // 获取当前时间日期组件(年,月,等)
48     NSDateComponents *curCmp = [curCalendar components:NSCalendarUnitYear fromDate:curDate];
49     return  curCmp.year == selfCmp.year;
50 }
51
52 // 判断是否是今天
53 - (BOOL)isThisToday
54 {
55     // 获取日历类
56     NSCalendar *curCalendar = [NSCalendar currentCalendar];
57     return [curCalendar isDateInToday:self];
58 }
59
60 - (BOOL)isThisYesterday
61 {
62     NSCalendar *curCalendar = [NSCalendar currentCalendar];
63     return [curCalendar isDateInYesterday:self];
64 }
时间: 2024-10-08 12:33:39

cell业务逻辑处理(时间格式化)的相关文章

用适配器模式处理复杂的UITableView中cell的业务逻辑

适配器是用来隔离数据源对cell布局影响而使用的,cell只接受适配器的数据,而不会与外部数据源进行交互. 源码: ModelCell.h 与 ModelCell.m // // ModelCell.h // Adapter // // Created by XianMingYou on 15/2/10. // Copyright (c) 2015年 XianMingYou. All rights reserved. // #import <UIKit/UIKit.h> #define NAM

细说业务逻辑(一)

内容提要 ===================前篇===================== 前言 内容提要 1.我把业务逻辑丢了!——找回丢失的业务逻辑 2.细说业务逻辑 2.1.业务逻辑到底是什么 2.2.业务逻辑的组成结构 2.2.1.领域实体(Domain Entity) 2.2.2.业务规则(Business Rules) 2.2.3.完整性约束(Validation) 2.2.4.业务流程及工作流(Business Processes and Workflows) 2.3.业务逻辑

java 业务逻辑理解

细说业务逻辑 2016年10月14日 07:16:28 阅读数:2295 细说业务逻辑   前言 记得几个月前,在一次北京博客园俱乐部的活动上,最后一个环节是话题自由讨论.就是提几个话题,然后大家各自加入感兴趣的话题小组,进行自由讨论.当时金色海洋同学提出了一个话题--"什么是业务逻辑".当时我和大家讨论ASP.NET MVC的相关话题去了,就没能加入"业务逻辑"组的讨论,比较遗憾. 其实,一段时间内,我脑子里对"业务逻辑"的概念也是非常模糊的.

微软-创建业务逻辑层

https://msdn.microsoft.com/zh-cn/dd255899 简介 在教程一中创建的数据访问层 (DAL) 将数据访问逻辑与表示逻辑清晰地分离开来.然而,尽管 DAL 从表示层中清晰地分离出数据访问层细节,它却并没有实施任何可能采用的业务规则.例如,我们想让我们的应用程序在 Discontinued 字段设为 1 时禁止对 Products 表的 CategoryID 或 SupplierID 字段的修改,还有,我们可能想实施一些资历规则以便禁止发生这样的情况:雇员被其后入

项目架构开发:业务逻辑层之领域驱动失血模型

前边我们构建了个数据访问层,功能虽然简单,但是基本够用了.传送门:项目架构开发:数据访问层 这次我们构建业务逻辑层 业务逻辑是一个项目.产品的核心,也是现实世界某种工作流程在代码层面的体现. 所以,业务逻辑的合理组织构造,或更真实地反映现实业务操作,对项目的成功与否非常重要 现在业界对业务逻辑层的开发,一般会参考Martin Fowler大师提出来的针对业务层开发的四种模式 分别是面向过程的事务脚本.表模块模式,面向对象的活动记录与领域开发模式 我们要做的就是领域驱动开发模式,注意标题中的“失血

如何避免在简单业务逻辑上面的细节上面出错

很多时候对于新的开发人员最容易犯得错误就是细节问题.对于如何在业务逻辑上面的细节上面出错,有很多要考虑的地方,但是如何保证不出错呢?需要把每一个考虑到的点都能列出来.然后按照列出来的点来考虑和编程可能对于细节出错上面有很大的帮助.然后是总结有那几种不同形式的业务逻辑,然后那些事通用的,那些是需要考虑的. 我这边只是单纯列出几点需要考虑的.1.字段是否可为空. 2.字段长度. 3.字段可以输入的格式是什么,只能是数字还是说别的. 4.字段之间有没有关联,直接是否存在关系. 5.操作会造成什么影响,

系统架构师-基础到企业应用架构-业务逻辑层

一.上章回顾 上章我们主要讲述了系统设计规范与原则中的具体原则与规范及如何实现满足规范的设计,我们也讲述了通过分离功能点的方式来实现,而在软件开发过程中的具 体实现方式简单的分为面向过程与面向对象的开发方式,而目前更多的是面向对象的开发设计方式.并且我们也讲述了该如何通过设计手段去分析功能点及设计分离 点,应该如何在设计的过程中分析的角度及如何去满足设计规范与原则.首先我们通过下图来回顾下上章要点: 二.摘要 本文将已架构的方式去分析分层结构中的业务层的设计,如何写出来内聚度,高耦合的业务逻辑层

视频直播编码,如何驾驭超复杂业务逻辑而不失漂亮的代码

折腾了一下午再加上晚上1小时,终于完成了总共6个视频,时长3小时48分的视频录制.这6个视频,完整演示了我们团队基于我们自己搭建的框架,进行编码的工作流程,即如何从原型图开始,一步一步分析需求,设计数据库,完成页面HTML,JS,CSS以至全部功能,现场直播,全程无删减. 我们的这个框架,就是为超复杂业务逻辑而生,同时不失漂亮的代码.通过这6个视频,你可以看到我们如何将复杂的业务逻辑,拆分成一个一个短小的业务单元,让每一个业务单元都那么简单.整个过程就像是庖丁解牛,每一行代码都那么理所当然,每一

翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 6 - 业务逻辑

Part 3: 设计逻辑层:核心开发 如前所述,我们的解决方案如下所示: 下面我们讨论整个应用的结构,根据应用中不同组件的逻辑相关性,分离到不同的层中,层与层之间的通讯通过或者不通过限制.分层属于架构风格,在应用的长时间生命周期中,解决维护和扩展问题.所以,让我们在解决方案中添加一个类库项目,命名为 Application.Common. Application.Common : 这是一个类库项目, 提供公共功能,可以被不同的业务逻辑层使用.例如:安全,日志,跟踪,验证等等. 定义在这个层中的组