你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> ios--時間格式化(cell業務邏輯處理)

ios--時間格式化(cell業務邏輯處理)

編輯:IOS開發綜合
ios--時間格式化(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 }

 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved