你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> iOS在cell中使用倒計時的處理方法

iOS在cell中使用倒計時的處理方法

編輯:IOS開發基礎

需求: 在UITableViewCell中每條數據中顯示該內容的倒計時, 並隨時間進行倒數

想法: 1.在每個cell中添加NSTimer, 負責對cell的倒數                                                     

出現的問題: cell有重用機制,每次重用時數據不好處理, 而且每個cell的倒數數不同, 需要在重用時對NSTimer進行廢除並重新開啟, 如果顯示的cell數量過多, 需要創建很多的NSTimer對象

2. 在模型中添加NSTimer, 負責對數據進行倒計數                             

 出現的問題: 與想法1一樣, 因為cell重用, 以及數據數量導致出現一樣的問題


解決方案: 創建倒計時管理類, 擁有一個時間差屬性, 並且每秒對時間差進行加1的操作,並發出一個通知;     而每個cell都監聽這個通知, 在通知回調中, 將服務器返回的剩余時間減去時間差再進行格式化顯示即可.   

好處: 全局只需要一個NSTimer對象, 沒有耦合性, 不需要對NSTimer作過多的操作;  

效果如下: 

1646270-3dfa49fb6be15f36.gif

demo效果圖

Demo地址: 

GitHub - herobin22/OYCountDownManager: iOS在cell中使用倒計時的處理方法

使用方法: 

1. 導入"OYCountDownManager.h"

2. 在第一次使用的地方調用[kCountDownManager start]核心代碼:

- (void)viewDidLoad {
     [super viewDidLoad];
    // 啟動倒計時管理 
    [kCountDownManager start];
}

3. 在Cell中監聽通知 kCountDownNotification

- (instancetype)initWithFrame:(CGRect)frame
{
     self = [super initWithFrame:frame];
     if (self) {
     // 監聽通知
      [[NSNotificationCenter defaultCenter] addObserver:self    selector:@selector(countDownNotification)    name:kCountDownNotification object:nil];
}     
    return self;
}

4. 在cell設置通知回調, 取得時間差, 根據時間差進行處理

/// 計算倒計時

NSInteger countDown = [self.model.count integerValue] - kCountDownManager.timeInterval;
if (countDown < 0) return;
/// 重新賦值
self.timeLabel.text = [NSString stringWithFormat:@"倒計時zd:zd:zd", countDown/3600, (countDown/60)%60, countDown%60];

5. 當刷新數據時,調用[kCountDownManager reload]

- (void)reloadData {
// 網絡加載數據
// 調用[kCountDownManager reload]
[kCountDownManager reload];
// 刷新
[self.tableView reloadData];
}

倒計時管理類

1646270-acacae6be2ddf665.png

CountDownManager.h

1646270-7f323ec36a80b265.png

CountDownManager.m

UITableViewCell 中監聽CountDown的通知, 並設置回調

1646270-6f236a4fe7822d43.png



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