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

来源:http://www.cnblogs.com/xiaotian666/archive/2016/08/14/5760798.html
-Advertisement-
Play Games

一.點擊更多按鈕 1.項目需求 點擊更多按鈕,從底部彈出一個框 2.怎麼從底部彈出一個框? 兩種方法: 一種用 UIActionSheet 另一種用 UIAlertController 2.1 使用UIActionSheet 好處: 不需要控制器,直接就能使用 缺點: 方法過期了,監聽按鈕的點擊比較 ...


一.點擊更多按鈕 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 }

 

   
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 作為前端人員,我們就是要與各種超文本標記打交道,用到各種不同的標簽元素。在使用的時候不知道有沒有註意到他們的分類歸屬?現在就來說一說博主的見解: 目前博主總結了三種分類方法:一是按封閉來劃分,一是按顯示內容來劃分,一是按文檔流來劃分。 一、按封閉可分為雙標簽和單標簽。 雙標簽也就是封閉標簽,我們經常 ...
  • Range對象之cloneRange和cloneContents 代碼效果如下 首次點擊“選擇內容“按鈕提示如下 接著會顯示 最後顯示 以下為整個代碼 看了以上代碼和效果也能知道cloneRange和cloneContents的區別了,最主要的是在實際應用中體會吧. Range對象之extractC ...
  • ...
  • 今天在學習《jQuery基礎教程》在學習編寫插件的時候,書中說利用回調函數來當參數,會極大的提高程式的靈活性。對回調函數很陌生。研究了一下給的示常式序。感覺對回調函數有了基本的瞭解。記錄下來,以備後用。 ...
  • Range對象基本用法 效果圖如下(在谷歌瀏覽器下的展示) 代碼如下 在火狐瀏覽器下的展示 為什麼會出現這種情況呢,因為火狐瀏覽器下可以針對不連續的內容多選. Range對象之SelectNode和selectNodeContents方法 效果圖如下 代碼內容如下: selectNodeConten ...
  • 自定義屬性 繪製 源碼: https://github.com/ln0491/ProgressDemo ...
  • Swift - RotateView 效果 源碼 https://github.com/YouXianMing/Swift-Animations ...
  • 介面 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...