Swift-MJRefresh下拉重新整理及上拉載入實踐
阿新 • • 發佈:2019-02-16
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) } }