標籤:
一.點擊更多按鈕1.項目需求 點擊更多按鈕,從底部彈出一個框
2.怎麼從底部彈出一個框? 兩種方法: 一種用 UIActionSheet 另一種用 UIAlertController 2.1 使用UIActionSheet 好處: 不需要控制器,直接就能使用 缺點: 方法到期了,監聽按鈕的點擊比較麻煩 原始碼:// 以後只要發現有可變參數,最後一定要添加nilUIActionSheet *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:1028 fmt.dateFormat = @"昨天 HH:mm";29 timeStr = [fmt stringFromDate:createDate];30 31 } else { // 昨天之前 08-05 21:10:0832 fmt.dateFormat = @"MM-dd HH:mm:ss";33 timeStr = [fmt stringFromDate:createDate];34 }35 }36 37 因為判斷日期要常用,我們就把判斷方法抽取到NSDate的分類38 39 - (BOOL)isThisYear40 {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)isThisToday54 {55 // 擷取日曆類56 NSCalendar *curCalendar = [NSCalendar currentCalendar];57 return [curCalendar isDateInToday:self];58 }59 60 - (BOOL)isThisYesterday61 {62 NSCalendar *curCalendar = [NSCalendar currentCalendar];63 return [curCalendar isDateInYesterday:self];64 }
cell商務邏輯處理(時間格式化)