刷新代码地址
- 友情提示: 遇到一些小问题, 最好及时下载最新的代码试试
自定义tabview
#pragma mark 主视图
-(void)initWithTableView
{
_homeTableView=[[HomeTableView alloc]initWithFrame:CGRectMake(0, NAVIGATIONBAR_HEIGHT, kScreenWidth, kScreenHeight-TABBAR_HEIGHT-NAVIGATIONBAR_HEIGHT) style:UITableViewStylePlain];
_homeTableView.backgroundColor=UICOLORBEIJING;
[self.view addSubview:_homeTableView];
//调用刷新按钮
[self setupRefresh];
}
判断网络连接情况
在调用下面方法时需在工程中导入包SystemConfiguration.framework,方法返回Yes时表示有网连接,返回No时表示没有网连接
#pragma mark 网络显示情况
- (BOOL)connectedToNetwork{
//创建零地址,0.0.0.0的地址表示查询本机的网络连接状态
struct sockaddr_storage zeroAddress;
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.ss_len = sizeof(zeroAddress);
zeroAddress.ss_family = AF_INET;
// Recover reachability flags
SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
SCNetworkReachabilityFlags flags;
//获得连接的标志
BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
CFRelease(defaultRouteReachability);
//如果不能获取连接标志,则不能连接网络,直接返回
if (!didRetrieveFlags)
{
return NO;
}
//根据获得的连接标志进行判断
BOOL isReachable = flags & kSCNetworkFlagsReachable;
BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;
return (isReachable&&!needsConnection) ? YES : NO;
}
定义刷新
定义刷新,在自定义tabview方法中调用
#pragma mark 设立上拉刷新下拉加载
- (void)setupRefresh
{
//下拉加载
[_homeTableView addHeaderWithTarget:self action:@selector(headerRereshing) dateKey:@"table"];
//刷新开始
[_homeTableView headerBeginRefreshing];
//上拉加载
[_homeTableView addFooterWithTarget:self action:@selector(footerRereshing)];
//定义刷新文字
_homeTableView.headerPullToRefreshText = @"下拉可以刷新";
_homeTableView.headerReleaseToRefreshText = @"松开马上刷新";
_homeTableView.headerRefreshingText = @"刷新中。。。";
_homeTableView.footerPullToRefreshText = @"上拉可以加载更多数据";
_homeTableView.footerReleaseToRefreshText = @"松开马上加载更多数据";
_homeTableView.footerRefreshingText = @"加载中。。。";
}
数据源(首次加载数据量)
-
在这里首次加载自动加载十条数据,从bmob后台数据库中通过for循环选择十条数据进行加载
-
其中有两个关键if 第一个是判断有无网络连接,第二个是判断当网络不好时调用方法
#pragma mark 数据源 -(void)_loadData { if ([self connectedToNetwork]) { //数据源 HomeModel *home=[[HomeModel alloc]init]; //tablview数据 BmobQuery *bquery=[BmobQuery queryWithClassName:@"Merchants"]; [bquery orderByDescending:@"createdAt"]; [bquery findObjectsInBackgroundWithBlock:^(NSArray *array, NSError *error) { //主视图 self.a=(int)array.count; //主要tabview主视图是在这里调用,避免代码块回调后没有数据存在 [self initWithTableView]; NSMutableArray *arrM5=[NSMutableArray array]; if (array.count==0) { UIAlertController *alertroller=[UIAlertController alertControllerWithTitle:@"提示" message:@"当前网络不好" preferredStyle:UIAlertControllerStyleAlert]; [alertroller addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { }]]; [self presentViewController:alertroller animated:YES completion:nil]; self.Wangluo=NO; }else { //选择十条数据加载 for (int i=0; i<10; i++) { [arrM5 addObject:array[i]]; } } //进行数据解析 NSMutableArray *arrM=[home HomeWithBmob:arrM5]; _homeTableView.dataList=arrM; //刷新tabview数据 [_homeTableView reloadData]; }]; } else{ UIAlertController *alertroller=[UIAlertController alertControllerWithTitle:@"提示" message:@"请检查网络连接" preferredStyle:UIAlertControllerStyleAlert]; [alertroller addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { }]]; [self presentViewController:alertroller animated:YES completion:nil]; [_homeTableView headerEndRefreshing]; } [MBProgressHUD hideHUDForView:_homeTableView animated:YES]; }
下拉刷新方法
-
在定义刷新中调用
-
当后台数据库添加新数据,下拉刷新会将原有数据源中的数组和请求数组进行比较,如果有新数据,会通过判断加载最新数据。
#pragma mark 下拉可以刷新 - (void)headerRereshing { if ([self connectedToNetwork]) { HomeModel *home=[HomeModel new]; BmobQuery *bquery=[BmobQuery queryWithClassName:@"Merchants"]; [bquery orderByDescending:@"createdAt"]; [bquery findObjectsInBackgroundWithBlock:^(NSArray *array, NSError *error) { if (array.count==self.a) { //创建隐藏按钮 self.YingChangBeiJing=[[UIView alloc]initWithFrame:self.view.frame]; self.YingChangBeiJing.backgroundColor=[UIColor blackColor]; self.YingChangBeiJing.alpha=.2; [self.view addSubview:self.YingChangBeiJing]; self.ShanglaSuanxin=[[UIImageView alloc]init]; self.ShanglaSuanxin.frame=CGRectMake((kScreenWidth-100)/2, (kScreenHeight-100)/2, 100, 100); self.ShanglaSuanxin.layer.cornerRadius=20; self.ShanglaSuanxin.layer.masksToBounds=YES; self.ShanglaSuanxin.backgroundColor=[UIColor whiteColor]; self.ShanglaSuanxin.image=[UIImage imageNamed:@"shuaxin3"]; [self.view addSubview:self.ShanglaSuanxin]; [NSTimer scheduledTimerWithTimeInterval:0.8 target:self selector:@selector(timechange) userInfo:nil repeats:NO]; [_homeTableView headerEndRefreshing]; }else { if (self.Wangluo==NO) { NSString *str=[NSString stringWithFormat:@"刷新成功"]; UIAlertController *alertroller=[UIAlertController alertControllerWithTitle:@"提示" message:str preferredStyle:UIAlertControllerStyleAlert]; [alertroller addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { }]]; [self presentViewController:alertroller animated:YES completion:nil]; NSMutableArray *arrM5=[NSMutableArray array]; for (int i=0; i<10; i++) { [arrM5 addObject:array[i]]; } NSMutableArray *arrM=[home HomeWithBmob:arrM5]; _homeTableView.dataList=arrM; [_homeTableView reloadData]; [_homeTableView headerEndRefreshing]; if (arrM5!=0) { self.Wangluo=YES; } } else { int a=(int)(array.count-self.a); self.YingChangBeiJing=[[UIView alloc]initWithFrame:self.view.frame]; self.YingChangBeiJing.backgroundColor=[UIColor blackColor]; self.YingChangBeiJing.alpha=.2; [self.view addSubview:self.YingChangBeiJing]; self.ShanglaSuanxin=[[UIImageView alloc]initWithFrame:CGRectMake((kScreenWidth-100)/2, (kScreenHeight-100)/2, 100, 100)]; self.ShanglaSuanxin.layer.cornerRadius=20; self.ShanglaSuanxin.layer.masksToBounds=YES; self.ShanglaSuanxin.backgroundColor=[UIColor whiteColor]; self.ShanglaSuanxin.image=[UIImage imageNamed:@"shuaxin2"]; [self.view addSubview:self.ShanglaSuanxin]; [NSTimer scheduledTimerWithTimeInterval:0.8 target:self selector:@selector(timechange) userInfo:nil repeats:NO]; NSMutableArray *arrMNew=[NSMutableArray array]; for (int i=0; i<a; i++) { [arrMNew addObject:array[i]]; } self.a=(int)array.count; NSMutableArray *arr=[home HomeWithBmob:arrMNew]; for (int i=0; i<a; i++) { [_homeTableView.dataList insertObject:arr[i] atIndex:0]; } [_homeTableView reloadData]; [_homeTableView headerEndRefreshing]; } } }]; } else{ UIAlertController *alertroller=[UIAlertController alertControllerWithTitle:@"提示" message:@"请检查网络连接" preferredStyle:UIAlertControllerStyleAlert]; [alertroller addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { }]]; [self presentViewController:alertroller animated:YES completion:nil]; [_homeTableView headerEndRefreshing]; } [MBProgressHUD hideHUDForView:_homeTableView animated:YES]; }
上拉加载
#pragma mark 上拉加载
- (void)footerRereshing
{
if ([self connectedToNetwork]) {
self.count++;
//数据源
HomeModel *home=[[HomeModel alloc]init];
//tablview数据
BmobQuery *bquery=[BmobQuery queryWithClassName:@"Merchants"];
[bquery orderByDescending:@"createdAt"];
[bquery findObjectsInBackgroundWithBlock:^(NSArray *array, NSError *error) {
if (array.count/10<self.count) {
self.YingChangBeiJing=[[UIView alloc]initWithFrame:self.view.frame];
self.YingChangBeiJing.backgroundColor=[UIColor blackColor];
self.YingChangBeiJing.alpha=.2;
[self.view addSubview:self.YingChangBeiJing];
self.ShanglaSuanxin=[[UIImageView alloc]initWithFrame:CGRectMake((kScreenWidth-100)/2, (kScreenHeight-100)/2, 100, 100)];
self.ShanglaSuanxin.layer.cornerRadius=20;
self.ShanglaSuanxin.layer.masksToBounds=YES;
self.ShanglaSuanxin.backgroundColor=[UIColor whiteColor];
self.ShanglaSuanxin.image=[UIImage imageNamed:@"shuaxin1"];
[self.view addSubview:self.ShanglaSuanxin];
[NSTimer scheduledTimerWithTimeInterval:0.8 target:self selector:@selector(timechange) userInfo:nil repeats:NO];
[_homeTableView footerEndRefreshing];
}else
{
NSMutableArray *arrM5=[NSMutableArray array];
if (array.count/10==self.count) {
for (int i=self.count*10; i<=self.count*10+array.count%10-1;i++) {
[arrM5 addObject:[array objectAtIndex:i]];
}
}else
{
for (int i=self.count*10; i<self.count*10+10;i++) {
[arrM5 addObject:[array objectAtIndex:i]];
}
}
NSMutableArray *arrM=[home HomeWithBmob:arrM5];
[_homeTableView.dataList addObjectsFromArray:arrM];
[_homeTableView reloadData];
[_homeTableView footerEndRefreshing];
}
}];
}else{
UIAlertController *alertroller=[UIAlertController alertControllerWithTitle:@"提示" message:@"请检查网络连接" preferredStyle:UIAlertControllerStyleAlert];
[alertroller addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
}]];
[self presentViewController:alertroller animated:YES completion:nil];
[_homeTableView footerEndRefreshing];
}
}
规定时间内删除隐藏图片
#pragma mark 上拉刷新移除背景视图
-(void)timechange
{
[self.ShanglaSuanxin removeFromSuperview];
[self.YingChangBeiJing removeFromSuperview];
}