请教如何自定义 uirefreshcontrol下拉 的样式

请教如何自定义 UIRefreshControl 的样式_百度知道
请教如何自定义 UIRefreshControl 的样式
提问者采纳
ios本身自带拉刷新控件我觉看看第三拉刷新代码找设置式些代码改自想要完全自写估计要间
来自团队:
其他类似问题
为您推荐:
自定义的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁他山知识网
IT专业问题解答
iOS的7 UIRefreshControl tintColor不工作的beginRefreshing
我想在我的UIRefreshControl设置tintColor(建筑物在iOS 7).我启用我做了以下令人耳目一新的故事情节中的tableViewController,然后在我的ViewController
viewDidLoad
[self.refreshControl setTintColor:[UIColor redColor]];
所以现在,当我拉刷新,刷新控件的颜色是红色的确实是:我想我的看法它出现的时候自动更新,所以我做:
- (void)viewDidAppear:(BOOL)animated{
[self.refreshControl beginRefreshing];}
它没有表现出纺车,根据
[self.tableView setContentOffset:CGPointMake(0, -self.refreshControl.frame.size.height) animated:NO];
给力表现出来.它显示了它,但现在是到默认的颜色:如果我尝试手动拉后刷新,它是红色的.我试图建立它在iOS6和它的作品,因为它应该,所以是一个iOS7错误?PS:这是不是与模拟器有问题,我试着在设备建设中,但同样的错误.PPS:我建立了一个示例项目,你能告诉我,如果你有同样的错误,或如果在我的代码出了问题?这里是链接:
Rank -- &nbsp3
嘿,只是偶然进入这个确切的问题.有趣的是我固定我的代码通过设置contentOffset第一,然后调用beginRefreshing
if(self.tableView.contentOffset.y == 0){
self.tableView.contentOffset = CGPointMake(0, -self.refreshControl.frame.size.height);
[self.refreshControl beginRefreshing];}
您可能希望动画这个过程:
[UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^(void){
self.tableView.contentOffset = CGPointMake(0, -self.refreshControl.frame.size.height);} completion:^(BOOL finished) {
[self.refreshControl beginRefreshing];}];
希望这可以帮助你.
Rank -- &nbsp0
@威廉·乔治的回答让我在正确的方向,但让我奇怪的自动版式动画的问题.因此,这里是为我工作的版本:
- (void)programaticallyRefresh {
// Hack necessary to keep UIRefreshControl's tintColor
[self.scrollView setContentOffset:CGPointMake(0, -1.0f) animated:NO];
[self.scrollView setContentOffset:CGPointMake(0, -self.refreshControl.frame.size.height) animated:YES];
[self.refreshControl beginRefreshing];
[self refresh];}
UIRefreshControl
Rank -- &nbsp0
尝试设置在viewWillAppear你UIRefreshControl的tintColor.
Rank -- &nbsp0
解决方案的tintColor问题:在viewDidLoad中添加此
[self.refreshControl setTintColor:[UIColor whiteColor]];[self.refreshControl tintColorDidChange];
现在你有当你手动调用beginRefresh白色指示灯.
Rank -- &nbsp0
强制setTintColor在主线程中运行. (主线程更新UI).
[[NSOperationQueue mainQueue] addOperationWithBlock:^ {
[self.refreshControl setTintColor:[UIColor redColor]];
[self.refreshControl beginRefreshing];}];
2013 - 2014 版权所有请教如何自定义 UIRefreshControl 的样式_百度知道
请教如何自定义 UIRefreshControl 的样式
提问者采纳
  ios本身自带拉刷新控件我觉看看第三拉刷新代码找设置式些代码改自想要完全自写估计要间
资深电脑人
其他类似问题
为您推荐:
自定义的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁refreshControl
是UITableViewController 里面一个属性,但是默认情况下是nil ,所以在使用其的时候需要创建,及其指定标题。一般情况下,我们有两种需求,一是下拉刷新,二是上拉滚动刷新新增多条数据。这两个需求用得比较频繁,下面来看看了两种需求的是怎样的运作情况。
1.下拉刷新
第一种方式是:下拉刷新的方式相对容易处理,监听UIRefreshControl 的UIControlEventValueChanged 事件后 当下拉的时候,该滚动的效果就会出来了。
@interface MainViewController ()
@property (nonatomic,strong) NSMutableArray *queryA
@property (nonatomic) NSInteger
- (void)viewDidLoad
[super viewDidLoad];
self.count = 0;
self.refreshControl
= [[UIRefreshControl alloc]init];
self.refreshControl.attributedTitle
= [[NSAttributedString alloc] initWithString:@"刷新中..."];
[self.refreshControl addTarget:self action:@selector(onRereshTableView) forControlEvents:UIControlEventValueChanged];
-(void) onRereshTableView
[self performSelector:@selector(handlerData) withObject:nil afterDelay:2];
-(void) handlerData
[self.refreshControl endRefreshing];
self.count = 0;
[self getNewData];
-(void) getNewData
[_queryArray removeAllObjects];
2.上拉刷新
第二种方式是 :(引用一个博客的文章来源做法),该方法主要在滚动条滚动完成后那里下手处理这个问题。也就是说当我们滚动到一定高度的时候,超出了原来的scrollView.contentSize.height的时候,原则理论上我们就执行刷新获取更多的内容方法。这里有一个细节的处理,就是递增数使用(统计你上拉刷新的次数)。我们知道,获取从服务器得到的数据是大部分来自数据库存款的。所以要进行分页查询的方式获取数据的方式处理这个问题。
分页最初的默认查询数据假设为10条,于是它下一次查询的开始就是从10开始查询 不包括10 。
伪代码如下:
sql.limit = 10;
sql.skip = self .count *sql.
-(void) scrollViewDidScroll:(UIScrollView *)scrollView
if (scrollView.contentOffset.y+scrollView.frame.size.height & scrollView.contentSize.height && scrollView.contentOffset.y &0)
//本身的内容高度
CGSize size = self.tableView.contentSize
size.height+=115
self.tableView.contentSize = size
[ self performSelector:@selector(getMoreData) withObject:nil afterDelay:0]
-(void)getMoreData
//不需要清理旧数据,让数组继续添加数据
self.count++
//下面为处理分页查询的结果
sql.limit = 10
sql.skip = self .count *sql.limit
[queryArray addObject:obj]
当上拉数据已经刷新完了,数据库已经没发查询到数据内容了,那么scrollViewDidScroll 和 getMoreData 或多或少有点漏洞和问题。所以这里还要完善一下。
我们使用这个组件主要的用于【下拉数据处理的逻辑】。下拉需要在UITableView的数据源清除干净再从远程获取最新时间表的数据。上拉需要在原来的数据源里面继续添加数据方式,并刷新UItableView 的内容高度来进行处理逻辑。一般情况下,我们需要增加一些额外的组件显示在下拉更新的过程。如UIButton 或者 UIActivityIndicatorView 的组件反馈在上拉的时候做出的UI反馈。
-(void) getNewData
[_queryArray removeAllObjects];
[_queryArray addObject:obj];
[self.tableView reloadData];
-(void)getMoreData
[_queryArray addObject:obj];
[self.tableView reloadData];
3. 疑惑点存在
如何理解下面的判断? 为什么 scrollView.contentOffset.y 在上拉的过程y是要求大于0 ? 这里我依旧感觉未解的地方。
if (scrollView.contentOffset.y+scrollView.frame.size.height & scrollView.contentSize.height && scrollView.contentOffset.y &0)
scrollView.contentOffset.y
这个正好是往上拉刷新数据 所以这个值必须大于0.
(scrollView.contentOffset.y+scrollView.frame.size.height) 这个和 可以理解为
所以当继续往上拉的时候小框就是会大于scrollView.contentSize.height 。这样子就可以判断获取更多数据了。
你往上拉的时候, contentOffset.y 大于0
你往下拉的时候, contentOffset.y 小于0
你可以理解为大底的框是始终不动的,而是小框在在上下移动,框下移动,视角正好往上移动(contentOffset.y &0),框上移动的时候,视角刚好是往下移动。(contentOffset.y & 0)
可以想象一下。
4.弊端的存在设计
在开始测试的过程当中 配合 scrollViewDidScroll 和
self.count++; 这种方式存在一个严重弊端,就是无限制去拉伸的时候会不断执行- getMoreData 方法 自增器self.count 就很傻乎乎不断递增递增,这样子在分页查询的时候并不准确。接下来改成下面的方式。
NSInteger page = 0;
= self.count +1; 改成这种方式
sql.limit = 10;
sql.skip = page *sql.limit;
才设置正确的当前页数
self.count =
这样一来我们就可以解决到 self.count++ 的问题了。
接下来,我们还要继续处理scrollViewDidScroll 的逻辑问题
-(void) scrollViewDidScroll:(UIScrollView *)scrollView
if (scrollView.contentOffset.y+scrollView.frame.size.height & scrollView.contentSize.height && scrollView.contentOffset.y &0)
if(self.isRefresing) return;
[ self performSelector:@selector(getMoreData) withObject:nil afterDelay:0];
-(void)getMoreData
if(self.isRefresing) return ;
self.isRefresing = YES;
[_queryArray addObject:obj];
[self.tableView reloadData];
self.isRefresing
经过改动后,效果比第一种处理的方式会好一点。同样也要注意一点是下拉数据删除的时间,是在成功获取后数据才删除,而不是在第一个
-(void) getNewData
[_queryArray removeAllObjects];
[_queryArray addObject:obj];
[self.tableView reloadData];
-(void) getNewData
[_queryArray removeAllObjects];
for(NSObject *obj in array)
[_queryArray addObject:obj];
[self.tableView reloadData];
总体而言,第一次接触下拉和上拉刷新多多少少还是有很多问题。而在一些开源类当中,还有其他做法,比如采用KVO 监听滚动条contentoffset的变化,采用这种机制去设计刷新思路还是挺ok 的。
5.细节处理
当我们刷新的过多数据的时候,数组保存的东西越多,这个时候内存会紧张。在网易新闻客户端iphone 版本看到一个很小的细节。当分页数出现过多的时候,网易客户端不会主动给客户更新数据采取的方式 是让用户去选择处理按钮点击获取更多数据。
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1383505次
积分:27150
积分:27150
排名:第107名
原创:1119篇
转载:21篇
评论:2119条
是夏天带来了热情,还是热情与夏天恋爱了?我倾夏天的脚步,感受清风的凉意,在行云流水之中,追求一种人生哲学.QQ :
(8)(14)(26)(23)(18)(15)(22)(20)(4)(3)(3)(3)(2)(2)(2)(2)(2)(2)(8)(3)(2)(4)(4)(2)(8)(3)(5)(4)(1)(4)(4)(4)(7)(5)(5)(3)(5)(11)(3)(2)(3)(5)(4)(10)(4)(8)(8)(8)(5)(8)(16)(21)(14)(18)(19)(24)(20)(23)(15)(25)(22)(27)(20)(27)(28)(36)(22)(20)(17)(23)(22)(23)(16)(11)(10)(13)(23)(18)(19)(16)(15)(20)(16)(22)(9)(10)(5)(7)(18)(17)(3)(13)(9)(1)(3)(9)(21)(4)

我要回帖

更多关于 uirefreshcontrol上拉 的文章

 

随机推荐