如何判断tableview下拉和下拉

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何判断tableview下拉和下拉相关的知识,希望对你有一定的参考价值。

无法直接判定tableview是否发生下拉,但是可以判断下拉的行数来判定tableview是否发生下拉。例如:

//当tableview下拉到最后一行的时候才触发
if (indexPath.row == self.m_data.count - 1) 

……代码

实例:实现下拉刷新

<span style="font-family:Comic Sans MS;font-size:18px;">#import <UIKit/UIKit.h>  

#import "EGORefreshTableHeaderView.h"  

  

@interface MainViewController : UITableViewController<UITableViewDelegate,UITableViewDataSource,EGORefreshTableHeaderDelegate>  

  

    EGORefreshTableHeaderView *_refreshTableView;  

    BOOL _reloading;  

 

@property (strong,nonatomic) NSArray *array;  

//开始重新加载时调用的方法  

- (void)reloadTableViewDataSource;  

//完成加载时调用的方法  

- (void)doneLoadingTableViewData;  

@end</span>  


#import "MainViewController.h"  

  

@interface MainViewController ()  

  

@end  

  

@implementation MainViewController  

@synthesize array = _array;  

  

#pragma mark -  

#pragma mark View life cycle  

-(void)viewDidLoad  

  

    [super viewDidLoad];  

      

    //设置导航条标题  

    self.navigationItem.title = @"Pull Refresh";  

      

    if (_refreshTableView == nil)   

        //初始化下拉刷新控件  

        EGORefreshTableHeaderView *refreshView = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 0.0f - self.tableView.bounds.size.height, self.view.frame.size.width, self.tableView.bounds.size.height)];  

        refreshView.delegate = self;  

        //将下拉刷新控件作为子控件添加到UITableView中  

        [self.tableView addSubview:refreshView];  

        _refreshTableView = refreshView;  

      

      

    //初始化用于填充表格的数据  

    NSArray *dataArray = [NSArray arrayWithObjects:@"Ryan",@"Vivi", nil];  

    self.array = dataArray;  

      

    //重新加载表格数据  

    [self.tableView reloadData];  

      

  

  

-(void)viewDidUnload  

  

    [super viewDidUnload];  

    _refreshTableView = nil;  

  

  

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation  

  

    return (interfaceOrientation == UIInterfaceOrientationPortrait);  

  

  

# pragma mark -  

# pragma mark UITableViewDataSource Methods  

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView  

  

    return 10;  

  

  

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section  

  

    return [self.array count];  

  

  

//带头标题的表格设置标题方法  

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section  

  

    return [NSString stringWithFormat:@"Title %d",section + 1];  

  

  

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath  

  

    static NSString *CellIdentifier = @"CellIdentifier";  

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];  

      

    if (!cell)   

        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];  

      

      

    cell.textLabel.text = [self.array objectAtIndex:indexPath.row];  

      

    return cell;  

  

  

#pragma mark -  

#pragma mark Data Source Loading / Reloading Methods  

//开始重新加载时调用的方法  

- (void)reloadTableViewDataSource  

    _reloading = YES;  

    //开始刷新后执行后台线程,在此之前可以开启HUD或其他对UI进行阻塞  

    [NSThread detachNewThreadSelector:@selector(doInBackground) toTarget:self withObject:nil];  

  

       

//完成加载时调用的方法  

- (void)doneLoadingTableViewData  

    NSLog(@"doneLoadingTableViewData");  

      

    _reloading = NO;  

    [_refreshTableView egoRefreshScrollViewDataSourceDidFinishedLoading:self.tableView];      

    //刷新表格内容  

    [self.tableView reloadData];  

  

  

#pragma mark -  

#pragma mark Background operation  

//这个方法运行于子线程中,完成获取刷新数据的操作  

-(void)doInBackground  

  

    NSLog(@"doInBackground");  

      

    NSArray *dataArray2 = [NSArray arrayWithObjects:@"Ryan2",@"Vivi2", nil];  

    self.array = dataArray2;  

    [NSThread sleepForTimeInterval:3];  

      

    //后台操作线程执行完后,到主线程更新UI  

    [self performSelectorOnMainThread:@selector(doneLoadingTableViewData) withObject:nil waitUntilDone:YES];  

  

  

  

#pragma mark -  

#pragma mark EGORefreshTableHeaderDelegate Methods  

//下拉被触发调用的委托方法  

-(void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView *)view  

  

    [self reloadTableViewDataSource];  

  

  

//返回当前是刷新还是无刷新状态  

-(BOOL)egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView *)view  

  

    return _reloading;  

  

  

//返回刷新时间的回调方法  

-(NSDate *)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView *)view  

  

    return [NSDate date];  

  

  

#pragma mark -   

#pragma mark UIScrollViewDelegate Methods  

//滚动控件的委托方法  

-(void)scrollViewDidScroll:(UIScrollView *)scrollView  

  

    [_refreshTableView egoRefreshScrollViewDidScroll:scrollView];  

  

  

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate  

  

    [_refreshTableView egoRefreshScrollViewDidEndDragging:scrollView];  

 

@end  


测试结果:

参考技术A float lastContentOffset;
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
lastContentOffset = scrollView.contentOffset.y;


- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
if (lastContentOffset < scrollView.contentOffset.y)
NSLog(@"向上滚动");
else
NSLog(@"向下滚动");

以上是关于如何判断tableview下拉和下拉的主要内容,如果未能解决你的问题,请参考以下文章

如何实现Swift快速集成下拉刷新和上拉加载更多

iOS tableView下拉图片放大

IOS下拉与UITextField和UITableView

IOS怎么实现一个UITableView的下拉刷新

动画下拉UIView时TableView单元格不改变高度

ios 下拉列表被tableview挡住了要怎么把下拉列表显示出来