UIRefreshControl使用总结
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
????UIRefreshControl 的使用還是比較簡單的,看一下?UIRefreshControl 的定義,基本就知道怎么用了。
????UIRefreshControl 是專門為?UITableViewController 設(shè)計(jì)的,官方不建議在非 UITableViewController 中使用。
????本文主要解決兩個(gè)問題:一是在非?UITableViewController 中使用,二是修改菊花顯示位置。
1、UITableViewController + UIRefreshControl
-?(void)viewDidLoad?{[super?viewDidLoad];UIRefreshControl?*refreshControl?=?[[UIRefreshControl?alloc]?init];[refreshControl?addTarget:self?action:@selector(refresh:)?forControlEvents:UIControlEventValueChanged];self.refreshControl?=?refreshControl; }-?(void)refresh:(UIRefreshControl?*)refreshControl {NSLog(@"start?refresh");[self?performSelector:@selector(endRefresh:)?withObject:refreshControl?afterDelay:2.0f]; }-?(void)endRefresh:(UIRefreshControl?*)refreshControl {[refreshControl?endRefreshing];NSLog(@"end?refresh"); }2、UIViewController + UITableView(UIScrollView) +?UIRefreshControl
@interface?TableViewDemo?()?<UITableViewDataSource,?UITableViewDelegate>@property?(nonatomic,?weak)?IBOutlet?UITableView?*tableView;@end -?(void)viewDidLoad?{[super?viewDidLoad];UIRefreshControl?*refreshControl?=?[[UIRefreshControl?alloc]?init];[refreshControl?addTarget:self?action:@selector(refresh:)?forControlEvents:UIControlEventValueChanged];[self.tableView?addSubview:refreshControl]; }-?(void)refresh:(UIRefreshControl?*)refreshControl {NSLog(@"start?refresh");[self?performSelector:@selector(endRefresh:)?withObject:refreshControl?afterDelay:2.0f]; }-?(void)endRefresh:(UIRefreshControl?*)refreshControl {[refreshControl?endRefreshing];NSLog(@"end?refresh"); }????直接集成上去,這時(shí)候你會發(fā)現(xiàn)下拉的時(shí)候,頁面會跳動一下(將UITableView 換成 UIScrollView 也會有同樣的問題)。
????既然?UIRefreshControl 是由?UITableViewController 控制的,那就讓?UITableViewController 來控制,修改代碼如下:
????修改之后,重新運(yùn)行,這時(shí)內(nèi)容跳動的問題沒有了。
????參考:http://stackoverflow.com/questions/12497940/uirefreshcontrol-without-uitableviewcontroller/
????對于?UIScrollView,目前沒有找到更好的解決方案,如果確實(shí)要使用的話,那就用只有一個(gè)Cell的UITableView來代替 UIScrollView。參考:http://segmentfault.com/q/1010000001823169
3、修改?UIRefreshControl 顯示的位置
????菊花默認(rèn)位置是在中間,總有那么一些奇葩需求,需要將菊花顯示在其他位置。目前發(fā)現(xiàn)了兩種方式修改顯示位置,但是總體來說本質(zhì)原理應(yīng)該是一樣的。
????方案一:修改?UIRefreshControl 的 bounds,從而修改其顯示位置,代碼如下:
-?(void)viewDidLoad?{[super?viewDidLoad];UIRefreshControl?*refreshControl?=?[[UIRefreshControl?alloc]?init];[refreshControl?addTarget:self?action:@selector(refresh:)?forControlEvents:UIControlEventValueChanged];self.refreshControl?=?refreshControl;CGRect?bounds?=?refreshControl.bounds;bounds.origin.x?=?50;//左移?50 //????rect.origin.x?=?-50;//右移?50bounds.origin.y?=?10;//上移?10; //????rect.origin.y?=?-10;//下移?10;refreshControl.bounds?=?bounds; }????方案二:用一個(gè) UIView(refreshControlContainerView) 來顯示?UIRefreshControl,通過修改?refreshControlContainerView.frame 來修改菊花的顯示位置,代碼如下:?
-?(void)viewDidLoad?{[super?viewDidLoad];UIRefreshControl?*refreshControl?=?[[UIRefreshControl?alloc]?init];[refreshControl?addTarget:self?action:@selector(refresh:)?forControlEvents:UIControlEventValueChanged];self.refreshControl?=?refreshControl;UIView?*refreshControlContainerView?=?[[UIView?alloc]?initWithFrame:CGRectMake(-50,?-10,?[UIScreen?mainScreen].bounds.size.width,?44.0f)];[self.tableView?addSubview:refreshControlContainerView];[refreshControlContainerView?addSubview:self.refreshControl]; }4、一個(gè)個(gè)人主頁的實(shí)例
? ? 實(shí)例代碼,請看 UserHomeViewController。
5、總結(jié)
????UIRefreshControl 只適用于一些簡單、與特殊的頁面,只能實(shí)現(xiàn)“下拉刷新”,不能實(shí)現(xiàn)“上拉加載更多”。
????這里對于“下拉刷新”與“上拉加載更多”推薦使用?MJRefresh ,用法簡單。
項(xiàng)目源代碼:https://git.oschina.net/cavintang/refresh-control-demo.git
轉(zhuǎn)載于:https://my.oschina.net/songzhu/blog/611343
總結(jié)
以上是生活随笔為你收集整理的UIRefreshControl使用总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多重连弹の多层级联 下拉框/查找框级联操
- 下一篇: 生成数据库测试数据的方法