| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- //
- // RefreshTableView.m
- // MicroVideo
- //
- // Created by Hepburn Alex on 12-11-23.
- // Copyright (c) 2012年 wei. All rights reserved.
- //
- #import "RefreshTableView.h"
- @implementation RefreshTableView
- @synthesize delegate, mbMoreHidden, mbRefreshHidden, separatorColor, separatorStyle, miBotOffset, contentSize, contentOffset;
- - (id)initWithFrame:(CGRect)frame
- {
- self = [super initWithFrame:frame];
- if (self) {
- miBotOffset = 0;
- _mTableView = [[UITableView alloc] initWithFrame:self.bounds];
- _mTableView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
- _mTableView.delegate = self;
- _mTableView.dataSource = self;
- _mTableView.backgroundColor = [UIColor colorWithRed:0.87 green:0.88 blue:0.91 alpha:1.0];
- [self addSubview:_mTableView];
- // [mTableView release];
- _mTableView.frame=CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height);
- _mLoadMore = [[LoadMoreView alloc] initWithFrame:CGRectMake(10, 0, _mTableView.frame.size.width-20, 32)];
- _mLoadMore.delegate = self;
- _mLoadMore.OnLoadMore = @selector(OnLoadMoreClick);
- _mLoadMore.hidden = YES;
- // [mTableView addSubview:mLoadMore];
- _mTableView.tableFooterView=_mLoadMore;
- // [mLoadMore release];
- // mLoadMore.backgroundColor=[UIColor redColor];
-
- _mRefreshHeader = [[RefreshTableHeaderView alloc] initWithFrame:CGRectMake(0, -_mTableView.bounds.size.height, _mTableView.frame.size.width, _mTableView.bounds.size.height)];
- [_mTableView addSubview:_mRefreshHeader];
- // [mRefreshHeader release];
- }
- return self;
- }
- - (void)setBackgroundColor:(UIColor *)color {
- [super setBackgroundColor:color];
- _mTableView.backgroundColor = color;
- }
- - (void)setSeparatorColor:(UIColor *)color {
- _mTableView.separatorColor = color;
- }
- - (UIColor *)separatorColor {
- return _mTableView.separatorColor;
- }
- - (void)setSeparatorStyle:(UITableViewCellSeparatorStyle)style {
- _mTableView.separatorStyle = style;
- }
- - (UITableViewCellSeparatorStyle)separatorStyle {
- return _mTableView.separatorStyle;
- }
- - (CGSize)contentSize {
- return _mTableView.contentSize;
- }
- - (CGPoint)contentOffset {
- return _mTableView.contentOffset;
- }
- - (void)setContentOffset:(CGPoint)Offset {
- _mTableView.contentOffset = Offset;
- }
- - (void)dealloc {
- // [super dealloc];
- }
- - (void)setMbMoreHidden:(BOOL)bHidden {
- _mLoadMore.hidden = bHidden;
- }
- - (BOOL)mbMoreHidden {
- return _mLoadMore.hidden;
- }
- - (void)setMbRefreshHidden:(BOOL)bHidden {
- _mRefreshHeader.hidden = bHidden;
- }
- - (BOOL)mbRefreshHidden {
- return _mRefreshHeader.hidden;
- }
- - (void)reloadData {
- [_mTableView reloadData];
- // int iTop = mTableView.contentSize.height;
- //mLoadMore.frame = CGRectMake(10, iTop, mTableView.frame.size.width-20, 32);
- }
- - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
- {
- if (delegate && [delegate respondsToSelector:@selector(numberOfSectionsInTableView:)]) {
- return [delegate numberOfSectionsInTableView:tableView];
- }
- return 0;
- }
- - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
- {
- if (delegate && [delegate respondsToSelector:@selector(tableView:numberOfRowsInSection:)]) {
- return [delegate tableView:tableView numberOfRowsInSection:section];
- }
- return 0;
- }
- - (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
- {
-
- if (delegate && [delegate respondsToSelector:@selector(tableView:heightForRowAtIndexPath:)]) {
- return [delegate tableView:tableView heightForRowAtIndexPath:indexPath];
- }
- return 40;
- }
- -(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath{
- if (delegate && [delegate respondsToSelector:@selector(tableView:estimatedHeightForRowAtIndexPath:)]) {
- return [delegate tableView:tableView estimatedHeightForRowAtIndexPath:indexPath];
- }
- return 250;
- }
- - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
- {
- if (delegate && [delegate respondsToSelector:@selector(tableView:cellForRowAtIndexPath:)]) {
- return [delegate tableView:tableView cellForRowAtIndexPath:indexPath];
- }
- return nil;
- }
- - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
- if (delegate && [delegate respondsToSelector:@selector(tableView:didSelectRowAtIndexPath:)]) {
- [delegate tableView:tableView didSelectRowAtIndexPath:indexPath];
- }
- }
- - (BOOL)CanRefresh {
- if (delegate && [delegate respondsToSelector:@selector(CanRefreshTableView:)]) {
- return [delegate CanRefreshTableView:self];
- }
- return NO;
- }
- //scrollView滚动时,就调用该方法。任何offset值改变都调用该方法。即滚动过程中,调用多次
- - (void)scrollViewDidScroll:(UIScrollView *)scrollView{
- if (delegate && [delegate respondsToSelector:@selector(scrollViewDidScroll:)]) {
- [delegate scrollViewDidScroll:scrollView];
- // if (scrollView.isDragging) {//显示下拉更新
- //
- // if (mRefreshHeader.state == PullRefreshPulling && scrollView.contentOffset.y > -65.0f && scrollView.contentOffset.y < 0.0f && [self CanRefresh]) {
- // [mRefreshHeader setState:PullRefreshNormal];
- // }
- // else if (mRefreshHeader.state == PullRefreshNormal && scrollView.contentOffset.y < -65.0f && [self CanRefresh]) {//显示松开更新
- // [mRefreshHeader setState:PullRefreshPulling];
- // }
- //
- // }
- }
-
- }
- // 滑动视图,当手指离开屏幕那一霎那,调用该方法。一次有效滑动,只执行一次。
- // decelerate,指代,当我们手指离开那一瞬后,视图是否还将继续向前滚动(一段距离),经过测试,decelerate=YES
- - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
- if (scrollView.contentOffset.y <= - 65.0f && [self CanRefresh]) {
- [_mRefreshHeader setState:PullRefreshLoading];
-
- //int iBotHeight = mLoadMore.hidden ? miBotOffset : miBotOffset+40;
- int iBotHeight = 0;
- [UIView beginAnimations:nil context:NULL];
- [UIView setAnimationDuration:0.2];
- // mTableView.contentInset = UIEdgeInsetsMake(60.0f, 0.0f, iBotHeight, 0.0f);
- //上边、左边、下边、右边
- _mTableView.contentInset = UIEdgeInsetsMake(60.0f, 0.0f, iBotHeight, 0.0f);
- _mTableView.contentOffset = CGPointMake(0, -60);
- [UIView commitAnimations];
- if (delegate && [delegate respondsToSelector:@selector(ReloadList:)]) {
- return [delegate ReloadList:self];
- }
- }
- }
- // 滚动视图减速完成,滚动将停止时,调用该方法。一次有效滑动,只执行一次。
- - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
- // int iOffset = scrollView.contentOffset.y+scrollView.frame.size.height-scrollView.contentSize.height;
-
- }
- - (void)OnLoadMoreClick {
- if (!_mLoadMore.hidden && [self CanRefresh]) {
- [_mLoadMore StartLoading];
- if (delegate && [delegate respondsToSelector:@selector(LoadMoreList:)]) {
- return [delegate LoadMoreList:self];
- }
- }
- }
- - (void)FinishLoading {
- int iBotHeight=0;
- [UIView beginAnimations:nil context:NULL];
- [UIView setAnimationDuration:.3];
- [_mTableView setContentInset:UIEdgeInsetsMake(0.0f, 0.0f, iBotHeight, 0.0f)];
- [UIView commitAnimations];
-
- [_mRefreshHeader setState:PullRefreshNormal];
- [_mRefreshHeader setCurrentDate];
- [_mLoadMore StopLoading];
- }
- @end
|