`

下拉加载(刷新)下一页效果

阅读更多

1、导入EGO框架,即附件中的EGO.ZIP中的两个类文件,以及一些相应的图片,在第二个tableview.zip文件中

2、我的.h文件

#import <UIKit/UIKit.h>
#import "EGORefreshTableHeaderView.h"

@interface QuanWenArt : UIViewController<UITableViewDelegate, UITableViewDataSource,
    EGORefreshTableHeaderDelegate,UIScrollViewDelegate>
{
//    CGFloat   height;
    EGORefreshTableHeaderView *_refreshHeaderView;
	BOOL _reloading;
    NSInteger cellHeight;
}

@property (nonatomic, retain) UITableView *table;
@property (nonatomic ,retain) NSArray *data;

@end
 

3.我的.m文件

#import "QuanWenArt.h"
#import "AppDelegate.h"
#import "MyNav.h"
#import "JSON.h"

@interface QuanWenArt ()

@end

@implementation QuanWenArt

@synthesize table = _table;
@synthesize data = _data;

-(void)dealloc
{
    [super dealloc];
    [_table release];
    [_data release];
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        NSLog(@"----------------------------------------------------------");
        self.navigationItem.title = @"文章";
//        [self.navigationItem.backBarButtonItem setBackButtonBackgroundImage:[UIImage imageNamed:@"navbar.png"]
//                                                                   forState:UIControlStateNormal
//                                                                 barMetrics:UIBarMetricsDefault];
        
//        //自定义返回按钮
        UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
        backButton.frame =  CGRectMake(0, 0, 68, 31);
        backButton.backgroundColor = [UIColor clearColor];
        [backButton setBackgroundImage:[UIImage imageNamed:@"btn_back.png"] forState:UIControlStateNormal];
        [backButton addTarget:self action:@selector(backAction) forControlEvents:UIControlEventTouchUpInside];
        UIBarButtonItem *backBarButton = [[UIBarButtonItem alloc] initWithCustomView:backButton];
        self.navigationItem.leftBarButtonItem = backBarButton;
        
        
        
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"这里是QuanWenArt类的viewDidLoad方法");
	self.table = [[[UITableView alloc] initWithFrame: CGRectMake(0.0, 0.0, 320.0, 480.0) style: UITableViewStylePlain] autorelease];
    self.table.delegate = self;
    self.table.dataSource = self;
    self.view = self.table;
    
    //初始化数据源
    AppDelegate *delegate= [[UIApplication sharedApplication] delegate];
    self.data = delegate.artsOfQWData;
//    NSLog(@"list is:%@",self.data);
    
    //增加下拉刷新加载数据  1;
    _refreshHeaderView=[[EGORefreshTableHeaderView alloc] initWithFrame:
						CGRectMake(0, 440, 320, 480)];
	_refreshHeaderView.delegate=self;
	[self.table addSubview:_refreshHeaderView];
	
	[_refreshHeaderView refreshLastUpdatedDate];
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.data.count;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: @"cell"]; //获取cell
    [ cell setBackgroundColor:[ UIColor blueColor ] ] ;
    
    //每次都要清空一下,否则cell中的内容会重叠
    for (UIView *subview in [cell.contentView subviews])
        [subview removeFromSuperview];
    
    if (cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle: UITableViewCellStyleValue1 reuseIdentifier: @"cell"] autorelease];
    }
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;   //表格单元右侧的披露按钮
    cell.selectionStyle = UITableViewCellSelectionStyleGray;
    
    int selectedIndex = [indexPath indexAtPosition: 1]; //获取行号
    for (int i=0; i<self.data.count; i++) {
        if (i == selectedIndex) {
            NSDictionary *dict = [self.data objectAtIndex:i];
//            NSString *idstr = [dict objectForKey:@"id"];
            NSString *titlestr = [dict objectForKey:@"title"];
//            NSString *authorstr = [dict objectForKey:@"author"];
//            NSLog(@"id=%@,title=%@,author=%@",idstr,titlestr,authorstr);
            cell.textLabel.text = titlestr;
            cellHeight = cell.frame.size.height;
            break;
        }
    }
    
    return cell;
}

- (void)backAction
{
    [self.navigationController popViewControllerAnimated:YES];
}

//此方法是开始读取数据 增加下拉刷新加载数据  2;
- (void)reloadTableViewDataSource
{
    NSLog(@"start");
    _reloading = YES;
    //打开线程,读取下一页数据
	[NSThread detachNewThreadSelector:@selector(requestNext) toTarget:self withObject:nil];
}

//增加下拉刷新加载数据  3;
- (void)requestNext
{
    NSAutoreleasePool * pool=[[NSAutoreleasePool alloc] init];
    //请求下一页数据
    NSMutableURLRequest *req = [[NSMutableURLRequest alloc] init];
    NSString *strURL = [NSString stringWithFormat:@"http://192.168.1.49:8080/exz/xmlli?fl=exz-qw-tb&op=new&ps=10&pn=2"];
    NSURL *connection = [[NSURL alloc] initWithString:strURL];
    
    [req setURL:connection];
    [req setHTTPMethod:@"GET"];
    
    NSURLResponse *rep = nil;
    NSError *error = nil;
    NSData *data = [NSURLConnection sendSynchronousRequest:req
                                         returningResponse:&rep
                                                     error:&error];
    
    if(error)
    {
        NSLog(@"服务器请求失败");
    }else {
        if (data) {
            NSLog(@"服务器请求成功");
            NSString *jsonStr = [[NSString alloc] initWithData:data
                                                      encoding:NSUTF8StringEncoding];
            NSArray *arr = [jsonStr JSONValue];
            AppDelegate *delegate= [[UIApplication sharedApplication] delegate];
            [delegate.artsOfQWData addObjectsFromArray:arr];
            self.data = delegate.artsOfQWData;
            [jsonStr release];  
        }
    }
    
    [pool release];
    //回到主线程跟新界面
	[self performSelectorOnMainThread:@selector(dosomething) withObject:nil waitUntilDone:YES];
}

//增加下拉刷新加载数据  4;
-(void)dosomething
{
	
	int count=[self.data count];
    NSString *str1 = [NSString stringWithFormat:@"%d",count];
    NSString *str2 = [NSString stringWithFormat:@"%d",self.table.contentSize.height];
    NSLog(@"-->%@",str1);
    NSLog(@"-->%@",str2);
//	
//	if(100*count>2000)
//	{
//		
//        self.table.contentSize=CGSizeMake(320, 40*count);
    //设置显示上来加载那一块view的CGRECT
		_refreshHeaderView.frame=CGRectMake(0, cellHeight*count, 320, 480);
		
//	}
	[self.table reloadData];
    [self performSelector:@selector(doneLoadingTableViewData) withObject:nil afterDelay:0];
}

//此方法是结束读取数据
- (void)doneLoadingTableViewData{
	
	//  model should call this when its done loading
	_reloading = NO;
	[_refreshHeaderView egoRefreshScrollViewDataSourceDidFinishedLoading:self.table];
	NSLog(@"end");
	
}

#pragma mark -
#pragma mark UIScrollViewDelegate Methods

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{	
	
	[_refreshHeaderView egoRefreshScrollViewDidScroll:self.table];
	
}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
	
	[_refreshHeaderView egoRefreshScrollViewDidEndDragging:self.table];
	
}


#pragma mark -
#pragma mark EGORefreshTableHeaderDelegate Methods

- (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView*)view{
	
	[self reloadTableViewDataSource];
	//[self performSelector:@selector(doneLoadingTableViewData) withObject:nil afterDelay:0.5];
	
}

- (BOOL)egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView*)view{
	
	return _reloading; // should return if data source model is reloading
	
}

- (NSDate*)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView*)view{
	
	return [NSDate date]; // should return date data source was last changed
	
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

@end
 

 

 

 

 

 

  • EGO.zip (3.7 KB)
  • 下载次数: 26
分享到:
评论

相关推荐

    h5单页面上拉刷新下拉加载

    可以使用Flexbox或Grid布局来创建响应式的选项卡,通过CSS动画实现上拉刷新时的旋转效果,以及下拉加载时的加载提示。同时,要确保在各种屏幕尺寸和方向下都能提供良好的视觉体验。 6. **文件结构**: - `index....

    android listview 下拉回弹刷新效果

    为了增强用户体验,许多应用引入了下拉回弹刷新效果,就像QQ空间和新浪微博那样。这种效果不仅增加了交互的趣味性,还使得用户能方便地获取最新的数据。本文将深入探讨如何实现这种Android ListView的下拉回弹刷新...

    手机端上拉刷新下拉加载

    1. 概念:下拉加载是指用户向下滚动到页面底部时,自动加载更多的内容,通常是分页数据的下一页。这种方式减少了用户翻页的繁琐操作,使得内容的浏览更加流畅。 2. 实现原理:下拉加载通过监听滚动事件,判断内容...

    listview上拉下拉加载自动刷新

    "listview上拉加载下一页,下拉加载上一页"的功能就显得尤为重要,这通常被称为“无限滚动”或“上拉加载更多”与“下拉刷新”的功能。 标题中的"listview上拉加载下一页,下拉加载上一页"意味着我们要实现两个主要...

    listview的上拉加载下拉刷新+本地缓存+简单的头尾布局

    在ListView中,可以使用SwipeRefreshLayout作为父容器,包裹ListView,实现下拉刷新效果。上拉加载通常需要自定义适配器并添加监听器,当用户滚动到底部时,触发加载更多数据的逻辑。 2. 本地缓存:为了提高应用...

    Android实现异步从网络加载图片列表和上拉加载更多、下拉刷新列表(使用xListView框架)

    本教程将深入探讨如何使用xListView框架实现异步加载网络图片,并且支持上拉加载更多和下拉刷新功能,提升用户体验。 首先,xListView是Android平台上的一个开源库,它扩展了原生的ListView组件,提供了更丰富的...

    手机端 dropload实现上拉加载 下拉刷新

    "手机端 dropload 实现上拉加载 下拉刷新"这个话题关注的就是如何通过JavaScript技术来解决这个问题,为用户提供更好的浏览体验。Dropload 是一种常见的移动端网页组件,它允许用户在滚动到底部时自动加载更多内容...

    wed页面上拉加载下拉刷新

    在Web开发中,"上拉加载下拉刷新"(Pull-to-Refresh 和 Infinite Scroll)是提升用户体验的重要功能,尤其在移动设备上广泛使用。这些功能允许用户通过在页面顶部下拉来刷新内容,或者在页面底部上拉来加载更多数据...

    android 自定义GridView 实现下拉刷新 底部加载更多

    在用户滚动到顶部时实现“下拉刷新”以及在滚动到底部时触发“加载更多”功能,是现代移动应用中常见的用户体验设计。下面将详细介绍如何自定义GridView以实现这两个特性。 首先,理解下拉刷新和加载更多的概念。...

    Android 下拉刷新和上拉底部加载

    总结来说,下拉刷新和上拉底部加载是Android应用中增强用户体验的重要功能,通过合理的布局、事件监听和后台数据处理,可以实现高效、流畅的滚动加载效果。在实际开发中,需要根据项目需求进行适当调整和优化,以...

    滑动加载,下拉刷新

    2. **用户体验**:确保动画效果平滑,刷新和加载状态的反馈清晰,避免用户在操作过程中感到困惑。 3. **兼容性**:测试不同浏览器和设备的兼容性,包括桌面端和移动端,确保功能在各种环境下都能正常工作。 4. **...

    使用XListView实现listview的下拉刷新和上拉加载功能

    6. **优化体验**:为了提供更好的用户体验,还可以设置下拉刷新和上拉加载的动画效果,自定义头部和底部的视图,以及在无更多数据时的提示。 总结来说,XListView是一个强大的Android组件,它通过简单的配置和接口...

    上拉刷新下拉 加载!

    在移动应用开发中,"上拉刷新下拉加载"是一种常见的用户体验设计模式,它极大地提升了用户在滚动浏览数据时的互动性和效率。这种设计通常应用于列表或者网格视图,允许用户通过向上滑动屏幕来刷新内容,以及向下滑动...

    android 上拉加载。下拉刷新实现

    在Android应用开发中,上拉加载和下拉刷新是常见的用户界面交互功能,极大地提升了用户体验。上拉加载常用于分页加载更多数据,而下拉刷新则用于更新当前显示的数据。下面将详细介绍如何在Android中实现这两种功能。...

    移动端下拉刷新上拉加载更多插件

    "移动端下拉刷新、上拉加载更多插件"就是针对这一需求而设计的一种交互组件,它极大地提升了用户在浏览内容时的便利性和满意度。这类插件主要应用于新闻资讯、电商商品列表等需要不断滚动更新内容的场景。下面将详细...

    android Listview下拉刷新 上拉(滑动分页)加载更多

    为了提供更好的用户体验,通常会添加下拉刷新和上拉加载更多的功能。这些功能使得用户可以在滚动到列表顶部时更新数据(下拉刷新),或者在滚动到底部时加载更多数据(上拉加载更多)。这种设计常见于许多社交媒体...

    xlistview_下拉刷新上拉加载

    在移动应用开发中,"XListView_下拉刷新上拉加载"是一个常见的组件,它用于实现列表视图的滚动交互,比如用户向上滑动时触发数据的刷新,向下滑动时加载更多数据。这种功能在社交应用、电商应用等场景中尤为常见,...

    android 下拉刷新 加载更多

    在Android应用开发中,"下拉刷新"和"加载更多"功能已经成为移动应用的标准特性,尤其是在数据流式显示的应用场景中,如新闻阅读、社交媒体和电商应用等。这两个功能极大地提升了用户体验,使得用户能够轻松获取最新...

Global site tag (gtag.js) - Google Analytics