Swift開辟之應用UIRefreshControl完成下拉刷新數據及uirefreshcontrol應用。本站提示廣大學習愛好者:(Swift開辟之應用UIRefreshControl完成下拉刷新數據及uirefreshcontrol應用)文章只能為提供參考,不一定能成為您想要的結果。以下是Swift開辟之應用UIRefreshControl完成下拉刷新數據及uirefreshcontrol應用正文
想要下拉刷新表格數據,上拉加載新數據,網上有很多第三方的完成類。
而假如僅僅須要完成下拉刷新數據的話,那末應用 UIRefreshControl 就足夠了,簡略有好用。
1.UIRefreshControl 的應用步調:
(1)創立 UIRefreshControl,並設置文字,色彩等信息。
(2)將 UIRefreshControl 添加到tableview視圖中。
(3)給 UIRefreshControl 添加辦法,當值轉變的時刻挪用,用於數據要求刷新。
(4)要求數據確認完成以後,挪用endRefreshing辦法,封閉刷新。
2.後果圖以下
3.代碼以下
import UIKit class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource { //消息列表 @IBOutlet weak var newsTableView: UITableView! //消息數組聚集 var dataArray:[HanggeArticle] = [HanggeArticle]() //拉刷新掌握器 var refreshControl = UIRefreshControl() override func viewDidLoad() { super.viewDidLoad() self.automaticallyAdjustsScrollViewInsets = false //添加刷新 refreshControl.addTarget(self, action: "refreshData", forControlEvents: UIControlEvents.ValueChanged) refreshControl.attributedTitle = NSAttributedString(string: "下拉刷新數據") newsTableView.addSubview(refreshControl) refreshData() } // 刷新數據 func refreshData() { //移除老數據 self.dataArray.removeAll() //隨機添加條新數據(時光是以後時光) for _ in ..< { let atricle = HanggeArticle(title: "消息題目\(Int(arcrandom()%))", createDate: NSDate()) self.dataArray.append(atricle) } self.newsTableView.reloadData() self.refreshControl.endRefreshing() } // 前往記載數 func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return dataArray.count; } // 前往單位格內容 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "myCell") //設置單位格題目 let atricle: HanggeArticle = dataArray[indexPath.row] as HanggeArticle cell.textLabel?.text = atricle.title //設置單位格副題目 let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" let str = dateFormatter.stringFromDate(atricle.createDate) cell.detailTextLabel?.text = str return cell; } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } } //消息構造體 struct HanggeArticle { var title:String var createDate:NSDate }
PS:UIRefreshControl的應用
1、應用規模
假如你裝了xcode_4.5_developer_preview,那末在UITableViewController.h文件中你會看到,UITableViewController外面有以下聲明,解釋UITableViewController曾經內置了UIRefreshControl控件
@property (nonatomic,retain) UIRefreshControl *refreshControl NS_AVAILABLE_IOS(6_0);
【注】:UIRefreshControl今朝只能用於UITableViewController,假如用在其他ViewController中,運轉時會獲得以下毛病提醒:(即UIRefreshControl只能被UITableViewController治理)
2012-06-15 14:34:34.908 DevDivUIRefreshControl[722:10103] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UIRefreshControl may only be managed by a UITableViewController' *** First throw call stack: (0x186fd72 0x1066e51 0x186fb4b 0x55a559 0x57238 0x5d482 0x55ad2 0x2ebb 0xeb2a3 0xeb30e 0x10b7e9 0x10b624 0x109aef 0x10999c 0x107adc 0x1082c6 0xecf24 0xed1e0 0xee084 0x5645c 0x5cf31 0x55ad2 0x4131d 0x414f6 0x4168c 0x49871 0x10a90 0x1196a 0x222be 0x22f9f 0x153fd 0x17ccf39 0x17ccc10 0x17e5da5 0x17e5b12 0x1816b46 0x1815ed4 0x1815dab 0x1128f 0x12e71 0x29fd 0x2925) libc++abi.dylib: terminate called throwing an exception (lldb)
2、若何應用
a)初始化
若何在UITableViewController 中應用UIRefreshControl呢,在下面給出的代碼附件中,你可以很具體的曉得,這裡引見一下症結的部門:
self.refreshControl = [[UIRefreshControl alloc]init]; // self.refreshControl.tintColor = [UIColor blueColor]; self.refreshControl.attributedTitle = [[NSAttributedString alloc]initWithString:@"下拉刷新"]; [self.refreshControl addTarget:self action:@selector(RefreshViewControlEventValueChanged) forControlEvents:UIControlEventValueChanged];
如下面看到的代碼,固然UITableViewController曾經聲清楚明了UIRefreshControl,然則貌似還沒有初始化,所以須要我們本身初始化。很奇異,初始化的時刻其實不須要給它指定frame,UITableViewController會為我們停止治理。遺憾的時今朝只看到下拉刷新功效,上拉刷新還沒有,估量在終究版外面蘋果會斟酌參加上拉刷新功效。
我們還可以給UIRefreshControl設置tintColor和attributedTitle。
b)下拉刷新事宜監聽
當用戶停止下拉刷新操作時,UIRefreshControl 會觸發一個UIControlEventValueChanged事宜,經由過程監聽這個事宜,我們便可以停止相似數據要求的操作了。以下代碼:
[self.refreshControl addTarget:self action:@selector(RefreshViewControlEventValueChanged)
c)停止數據要求
在示例中,為了演示數據要求,我簡略的做了一個延時處置,2秒鐘後,挪用handleData
[self performSelector:@selector(handleData) withObject:nil afterDelay:2];
在handleData外面,就表現曾經要求到了數據,在此停止UI更新便可。也須要留意的是,我們挪用UIRefreshControl 的endRefreshing辦法,表現刷新停止,讓UIRefreshControl更新顯示。
- (void) handleData { NSLog(@"refreshed"); [self.refreshControl endRefreshing]; self.refreshControl.attributedTitle = [[NSAttributedString alloc]initWithString:@"下拉刷新"]; self.count++; [self.tableView reloadData]; }
3、官方頭文件
上面是sdk中UIRefreshControl的聲明,想必看了上面的代碼,你曾經曉得若何應用了。
// // UIRefreshControl.h // UIKit // // Copyright 2012 Apple Inc. All rights reserved. // #import <Foundation/Foundation.h> #import <UIKit/UIControl.h> #import <UIKit/UIKitDefines.h> NS_CLASS_AVAILABLE_IOS(6_0) @interface UIRefreshControl : UIControl /* The designated initializer * This initializes a UIRefreshControl with a default height and width. * Once assigned to a UITableViewController, the frame of the control is managed automatically. * When a user has pulled-to-refresh, the UIRefreshControl fires its UIControlEventValueChanged event. */ - (id)init; @property (nonatomic, readonly, getter=isRefreshing) BOOL refreshing; @property (nonatomic, retain) UIColor *tintColor UI_APPEARANCE_SELECTOR; @property (n