1. 程式人生 > >Swift-MJRefresh下拉重新整理及上拉載入實踐

Swift-MJRefresh下拉重新整理及上拉載入實踐

Hello,今天給各位帶來GitHub非常火一個第三方外掛MJRefresh,有小碼哥製作的,崇拜一下。。。

1、下載地址:https://github.com/CoderMJLee/MJRefresh  下載解壓後將一下MJRefresh資料夾複製到你的Swift工程中,包含以下幾個檔案:

Base資料夾                   Custom資料夾
MJRefresh.bundle            MJRefresh.h
MJRefreshConst.h            MJRefreshConst.m
UIScrollView+MJExtension.h  UIScrollView+MJExtension.m
UIScrollView+MJRefresh.h    UIScrollView+MJRefresh.m
UIView+MJExtension.h        UIView+MJExtension.m

2、在工程的橋接檔案中新增如下程式碼:(如何建立橋接檔案:右鍵工程-->建立普通OC檔案,名稱隨意起-->建立成功,會提示是否建立橋接檔案-->點選是,會建立一個以"工程名-Bridging-Header.h"的.h檔案,這就是你的橋接檔案。)

//下來重新整理及上拉載入MJRefresh
#import "MJRefresh.h"

3、然後就上程式碼吧,下面實現了最基本的帶文字重新整理及載入,同時實現了帶圖片的下拉重新整理及上拉載入。(圖片檔案在下載MJRefresh外掛demo工程中,請自取。)
//
//  NavigationViewController.swift
//  Yundou
//
//  Created by Slow on 16/1/3.
//  Copyright © 2016年 Slow. All rights reserved.
//

import UIKit

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {

    var tableView:UITableView!
    var idleImages:NSMutableArray = []
    var refreshingImages:NSMutableArray = []
    var objectArr = [String]()
    var i = 0
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        self.tableView = UITableView(frame: self.view.frame)
        self.view.addSubview(self.tableView)
        self.tableView.delegate = self
        self.tableView.dataSource = self
        
        //註冊tableViewCell
        self.tableView.registerClass(UITableViewCell.classForCoder(), forCellReuseIdentifier: "cell")
        //去除無資料的空tableViewCell
        self.tableView.tableFooterView = UIView()
        
        for i ; i<10 ; i++ {
            self.objectArr.append("\(i)")
        }
        
        // 設定普通狀態的動畫圖片
        for (var i = 1; i<=60; i++) {
            var image:UIImage = UIImage(named: "dropdown_anim__000\(i)")! as UIImage
            idleImages.addObject(image)
        }
        
        // 設定普通狀態的動畫圖片
        for (var i = 1; i<=3; i++) {
            var image: UIImage = UIImage(named: "dropdown_loading_0\(i)")! as UIImage
            idleImages.addObject(image)
        }
        
        //定義動畫重新整理Header
        let header:MJRefreshGifHeader = MJRefreshGifHeader(refreshingTarget: self, refreshingAction: "headerRefresh")
        //設定普通狀態動畫圖片
        header.setImages(idleImages as [AnyObject], forState: MJRefreshState.Idle)
        //設定下拉操作時動畫圖片
        header.setImages(refreshingImages as [AnyObject], forState: MJRefreshState.Pulling)
        //設定正在重新整理時動畫圖片
        header.setImages(idleImages as [AnyObject], forState: MJRefreshState.Refreshing)
        
        //設定mj_header
        self.tableView.mj_header = header
        //普通帶文字下拉重新整理的定義
//        self.tableView.mj_header = MJRefreshNormalHeader(refreshingTarget: self, refreshingAction: "headerRefresh")
        //普通帶文字上拉載入的定義
//        self.tableView.mj_footer = MJRefreshAutoNormalFooter(refreshingTarget: self, refreshingAction: "footerRefresh")
    
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    //定義表格有多少行
    func numberOfSectionsInTableView(tableView: UITableView) -> Int{
        return 1
    }
    
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
        return objectArr.count
    }
    
    //定義tableViewCell樣式
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("cell",forIndexPath:indexPath) as UITableViewCell
        
        cell.textLabel?.text = "第\(self.objectArr[indexPath.row])行"
        
        return cell
        
    }
    
    //下拉重新整理操作
    func headerRefresh(){
        //模擬資料請求,設定10s是為了便於觀察動畫
        self.delay(10) { () -> () in
            self.objectArr.removeAll()
            self.i = 10
            for self.i ; self.i<20 ; self.i++ {
                self.objectArr.append("\(self.i)")
            }
            //結束重新整理
            self.tableView.mj_header.endRefreshing()
            self.tableView.reloadData()
        }
    }
    
    //上拉載入操作
    func footerRefresh(){
        //模擬資料請求,設定10s是為了便於觀察動畫
        self.delay(10) { () -> () in
            let j = self.i + 10
            for self.i ; self.i<j ; self.i++ {
                self.objectArr.append("\(self.i)")
            }
            //結束重新整理
            self.tableView.mj_footer.endRefreshing()
            self.tableView.reloadData()
        }
    }

    //延遲方法
    func delay(time:Double,closure:() -> ()){
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(time * Double(NSEC_PER_SEC))), dispatch_get_main_queue(), closure)
    }
}