`
修博龙泉
  • 浏览: 318237 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

uitableview 上提下拉刷新

 
阅读更多
#import <UIKit/UIKit.h>
#import "PullToRefreshTableView.h"

@interface ChyoViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>{
    PullToRefreshTableView * tableView;  
    NSMutableArray         * array;      //  数据源
}

@property (nonatomic, retain) PullToRefreshTableView * tableView;
@property (nonatomic, retain) NSMutableArray                  * array;

- (void)updateThread:(NSString *)returnKey;
- (void)updateTableView;

@end



//
//  ChyoViewController.m
//  PullToRefresh
//
//  Created by hsit on 12-1-30.
//  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//

#import "ChyoViewController.h"

@implementation ChyoViewController

@synthesize tableView;
@synthesize array;

- (void)dealloc{
    [tableView release];
    [array release];
    [super dealloc];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];
    array = [[NSMutableArray alloc] init];
    tableView = [[PullToRefreshTableView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
   [table setContentSize:CGSizeMake(320, 960)];
    tableView.delegate = self;
    tableView.dataSource = self;
    tableView.backgroundColor = [UIColor clearColor];
    [self.view addSubview:tableView];
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
}

- (void)viewWillDisappear:(BOOL)animated
{
	[super viewWillDisappear:animated];
}

- (void)viewDidDisappear:(BOOL)animated
{
	[super viewDidDisappear:animated];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

- (void)updateThread:(NSString *)returnKey{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    sleep(2);
    switch ([returnKey intValue]) {
        case k_RETURN_REFRESH:
            [array removeAllObjects];
            [array addObject:[NSString stringWithFormat:@"%d", [array count] + 1]];
            break;
            
        case k_RETURN_LOADMORE:
            [array addObject:[NSString stringWithFormat:@"%d", [array count] + 1]];
            break;
            
        default:
            break;
    }
    [self performSelectorOnMainThread:@selector(updateTableView) withObject:nil waitUntilDone:NO];
    [pool release];
}

- (void)updateTableView{
    if ([array count] < 10) {
        //  一定要调用本方法,否则下拉/上拖视图的状态不会还原,会一直转菊花
        [tableView reloadData:NO];
    } else {
        //  一定要调用本方法,否则下拉/上拖视图的状态不会还原,会一直转菊花
        [tableView reloadData:YES];
    }
}

#pragma mark -
#pragma mark Scroll View Delegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
    [tableView tableViewDidDragging];
}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
    NSInteger returnKey = [tableView tableViewDidEndDragging];
    
    //  returnKey用来判断执行的拖动是下拉还是上拖,如果数据正在加载,则返回DO_NOTHING
    if (returnKey != k_RETURN_DO_NOTHING) {
        NSString * key = [NSString stringWithFormat:@"%d", returnKey];
        [NSThread detachNewThreadSelector:@selector(updateThread:) toTarget:self withObject:key];
    }
}

#pragma mark -
#pragma mark Table View DataSource 
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return 1;
}

- (NSInteger)tableView:(UITableView *)aTableView numberOfRowsInSection:(NSInteger)section{
    if ([array count] == 0) {
        //  本方法是为了在数据未空时,让“下拉刷新”视图可直接显示,比较直观
        tableView.contentInset = UIEdgeInsetsMake(k_STATE_VIEW_HEIGHT, 0, 0, 0);
    }
    return [array count];
}

- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString * identifier = @"cell";
    UITableViewCell * cell = [aTableView dequeueReusableCellWithIdentifier:@"cell"];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier] autorelease];
    }
    NSInteger row = indexPath.row;
    cell.textLabel.text = [array objectAtIndex:row];
    return cell;
}
@end

分享到:
评论

相关推荐

    UITableView的下拉刷新

    总之,通过UIRefreshControl和自定义的上拉加载逻辑,你可以为UITableView实现下拉刷新和上拉加载更多功能,提升应用的交互体验。同时,第三方库如XQRefresh则提供了更多便利和定制选项。在实际开发中,根据项目需求...

    UITableView 下拉刷新demo

    本示例"UITableView 下拉刷新demo"旨在教你如何在你的iOS应用中实现这个功能。 首先,下拉刷新功能通常依赖于UIRefreshControl类,这是苹果提供的一个内置控件,可以轻松地添加到UITableView中。创建...

    UITableView 下拉刷新EGOTableViewPullRefresh

    在iOS开发中,UITableView是用于显示列表数据的重要控件,而下拉刷新功能则成为现代应用的标准特性之一,它允许用户在顶部拉动表格时获取最新的数据。`UITableView`的下拉刷新功能通常通过第三方库来实现,其中`...

    UITableView 上拉 下拉 修改版

    下拉刷新(Pull-to-Refresh)则是用户在列表顶部向下拉动以刷新列表内容的交互方式。这通常用于获取最新的数据,如邮件应用中检查新邮件。实现这个功能,开发者需要使用UIRefreshControl或者自定义视图,监听手势...

    swift UICollectionView, UITableView 上拉/下拉刷新 修改

    在Swift中,实现UITableView或UICollectionView的上拉加载更多和下拉刷新功能,主要涉及到以下几个关键知识点: 1. **下拉刷新**:下拉刷新通常用来更新表格的初始数据。在Swift中,可以使用UIRefreshControl类来...

    UITableView上拉刷新、下拉刷新

    总之,为UITableView实现上拉刷新和下拉刷新是iOS开发中的常见任务,通过UIRefreshControl和自定义滚动代理方法可以轻松实现。使用第三方库则可以进一步提升用户体验,提供更个性化的交互设计。在实践中,确保正确...

    UITableview(上拉下拉刷新)

    本主题将深入探讨如何实现`UITableView`的上拉和下拉刷新功能,这在移动应用中非常常见,可以带给用户流畅的交互体验。 首先,下拉刷新通常用于更新当前视图的数据,比如加载最新的新闻或邮件。而上拉加载更多则是...

    UITableView下拉-上拉刷新

    在“UITableView下拉-上拉刷新”这个主题中,我们主要讨论如何在UITableView中实现下拉刷新和上拉加载更多的功能,以及在加载过程中添加额外的用户体验元素。 1. **下拉刷新**: - 下拉刷新(Pull-to-Refresh)是...

    IOS下拉刷新Demo实现

    首先,EGOTableViewPullRefresh是由Egor Gorin开发的一个轻量级库,专门用于在UITableView上实现下拉刷新。它提供了易于使用的接口和自定义的刷新指示器视图,帮助开发者快速集成这一功能。 1. **集成...

    uiscrollview uitableview上拉刷新

    本教程将详细讲解如何在 `UIScrollView`(尤其是 `UITableView`)中实现上拉和下拉刷新功能。 一、`UIScrollView` 基础 `UIScrollView` 是一个可以容纳大型内容并允许用户滚动查看的视图。它通过内容大小(content...

    UITableView下拉刷新案例.zip

    这个"UITableView下拉刷新案例.zip"应该包含了一个实际的iOS项目示例,演示了如何在UITableView中实现下拉刷新。 首先,下拉刷新的核心是UIRefreshControl对象,它是iOS SDK内置的专门用于处理下拉刷新操作的控件。...

    ios下拉刷新uitableview

    在iOS开发中,`UITableView`是用于展示列表数据的核心组件,而下拉刷新(Pull-to-Refresh)功能则成为现代应用中的一个常见交互设计。这个功能允许用户通过下拉列表来触发新的数据加载,比如刷新最新的消息或者更新...

    IOS中UITableview实现上拉和下拉刷新

    下拉刷新(Pull-to-Refresh)是指用户通过向下滑动表格视图来触发数据的更新,而上拉加载更多(Load More)则是当用户滚动到底部时,加载更多的内容。这两种功能都需要对UITableView的滚动事件进行监听和响应。 在...

    swift  UICollectionView, UITableView 上拉/下拉刷新

    swift UICollectionView, UITableView 上拉/下拉刷新源代码,xcode6.1 保证能用,源代码出处(http://code4app.com/ios/Pull-to-refresh-in-Swift/53aa79ce933bf07d628b524b)不过下载下来编译20多处错误,本人已经...

    下拉刷新demo

    它不仅支持下拉刷新,还支持上拉加载更多。 MJRefresh的使用通常包括以下步骤: - 引入库:通过CocoaPods或手动导入库文件。 - 添加刷新控件:在`viewDidLoad`方法中,对`UITableView`添加下拉刷新组件,如`[self....

    仿QQ下拉刷新

    【仿QQ下拉刷新】是一种常见的移动应用交互设计,它让用户在顶部下拉时触发页面内容的刷新。这种设计在QQ等社交应用中被广泛采用,后来成为了许多Android和iOS应用的标准特性。实现这一功能主要涉及到滚动视图、动画...

    iOS 下拉刷新

    在iOS开发中,下拉刷新(Pull-to-Refresh)是一种常见的功能,允许用户通过在屏幕顶部向下拉动来更新内容。这种交互方式最早由Twitter引入,随后被广泛应用于各种应用程序,如新闻阅读器、社交媒体应用等。这个...

    UITableView下拉刷新

    下拉刷新(Pull-to-Refresh)是一种常见的移动应用交互设计,用户通过在屏幕上向下拉动视图来触发刷新操作。这种功能通常被用于列表视图,如`UITableView`,以便用户获取最新的数据。 二、第三方库的选择 在iOS开发...

    IOS UITableView上拉刷新和下拉加载

    `UITableView`的上拉刷新和下拉加载功能是提升用户体验的关键特性,让用户在滚动到列表顶部时加载更多历史数据(下拉加载),而在滚动到底部时获取新的数据(上拉刷新)。这种设计模式在现代移动应用中非常常见,...

    下拉刷新的demo

    在iOS中,下拉刷新功能通常通过UITableView的扩展API实现,即UIRefreshControl类。以下是一般的实现步骤: 1. 创建UIRefreshControl对象:首先在你的UIViewController或UITableViewController中创建一个...

Global site tag (gtag.js) - Google Analytics