fenye


#import "WTAlbumImVC.h"
#import "WTPullRefreshView.h"
#import "WTAlbumPicListCell.h"
#import "WTPictureDetailVC.h"

@interface WTAlbumImVC () <WTPullRefreshViewDelegate, WTPictureDetailVCDelegate>
// picture list view
@property (retain, nonatomic) IBOutlet UIView *picListView;
@property (retain, nonatomic) IBOutlet UITableView *picTableView;
@property (retain, nonatomic) WTPullRefreshView *picPullRefreshView;

// im view
@property (retain, nonatomic) IBOutlet UIView *imView;


// picture list view data source
@property (retain, nonatomic) NSMutableArray *picArray;
@property (assign, nonatomic) BOOL picHasMore;
@property (retain, nonatomic) NSString *picCursor;
// im view data source

@end

@implementation WTAlbumImVC

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (UIBarButtonItem*)createBackBarButton
{
    //定制自己的风格的  UIBarButtonItem
    UIImage* image= [UIImage imageNamed:@"back.png"];
    UIImage* imagef = [UIImage imageNamed:@"back_focus.png"];
   
    CGRect backframe= CGRectMake(0, 0, image.size.width, image.size.height);
   
    UIButton* backButton= [UIButton buttonWithType:UIButtonTypeCustom];
    backButton.frame = backframe;
    [backButton setBackgroundImage:image forState:UIControlStateNormal];
    [backButton setBackgroundImage:imagef forState:UIControlStateHighlighted];
    [backButton addTarget:self action:@selector(onBackButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
   
    UIBarButtonItem* someBarButtonItem= [[[UIBarButtonItem alloc] initWithCustomView:backButton] autorelease];
    return someBarButtonItem;
}


- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    self.navigationItem.title = _album.albumName;
    UIViewController *rootVC = [self.navigationController.viewControllers objectAtIndex:0];
    if (rootVC == self || _dismissWhenExit) {
        self.navigationItem.leftBarButtonItem = [self createBackBarButton];
    }
   
    self.picPullRefreshView = [[[WTPullRefreshView alloc] initWithTableView:_picTableView refreshOn:YES loadMoreOn:NO] autorelease];
    _picPullRefreshView.delegate = self;
   
    if (!self.picArray) {
        // first time load
        self.picArray = [NSMutableArray arrayWithCapacity:100];
        [_picPullRefreshView triggerPullRefresh];
    }
}


- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)dealloc {
    [TMRequest cancelRequestsWithDelegate:self];
    self.picListView = nil;
    self.picTableView = nil;
    self.picPullRefreshView = nil;
    self.imView = nil;
   
    self.picArray = nil;
    self.picCursor = nil;

    [super dealloc];
}



- (void)viewDidUnload {
    self.picListView = nil;
    self.picTableView = nil;
    self.picPullRefreshView = nil;
    self.imView = nil;

    [super viewDidUnload];
}


#pragma mark - User Click Methods
- (void)onBackButtonClicked:(id)sender {
    [self dismissModalViewControllerAnimated:YES];
}

- (void)onPictureClicked:(WTPicture *)aPicture {
    WTPictureDetailVC *detailVC = [[[WTPictureDetailVC alloc] init] autorelease];
    NSUInteger index = [_picArray indexOfObject:aPicture];
    detailVC.hidesBottomBarWhenPushed = YES;
    [detailVC setDisplayIndex:index inPictureArray:_picArray hasMore:_picHasMore cursor:_picCursor delegate:self];
    [self.navigationController pushViewController:detailVC animated:YES];
}

#pragma mark - Network Methods
- (void)getPictureListSuccess:(TMRequest *)aRequest{
    BOOL refresh = (aRequest.tag==1);
    if (refresh) {
        [_picArray removeAllObjects];
    }
    TMCursorArray *cursorArray = aRequest.result;
    if (cursorArray.array) {
        [_picArray addObjectsFromArray:cursorArray.array];
    }
    self.picHasMore = cursorArray.hasMore;   
    self.picCursor = cursorArray.cursor;

    _picPullRefreshView.needLoadMoreData = cursorArray.hasMore;
   
    [_picTableView reloadData];
    [_picPullRefreshView didFinishLoadingSuccess:YES];
}

- (void)getPictureListFail:(TMRequest *)aRequest{
    [_picPullRefreshView didFinishLoadingSuccess:NO];
}


- (void)getPictureListFromServerByRefresh:(BOOL)aRefresh {
    TMRequest *request = [[WTAlbumService sharedInstance] getPictureListByAlbumId:_album.albumId cursor:aRefresh?nil:_picCursor];
    [request setDelegate:self successSel:@selector(getPictureListSuccess:) failSel:@selector(getPictureListFail:)];
    if (aRefresh) {
        request.tag = 1;
    }
    [request runAsync];
}

#pragma mark - WTPictureDetailVC Delegate Methods

- (void)pictureDetailVC:(WTPictureDetailVC *)aVC
          exitAtPicture:(WTPicture *)aPicture
         inPictureArray:(NSArray *)anArray
                hasMore:(BOOL)aHasMore
                 cursor:(NSString *)aCursor
{
    if ([_picPullRefreshView isLoading]) {
        // 正在加载或者刷新的话,取消请求,避免数据异常
        [TMRequest cancelRequestsWithDelegate:self];
        [_picPullRefreshView didFinishLoadingSuccess:NO];
    }
   
    if ([_picArray count] < [anArray count]) {
        // more data loaded
        [_picArray removeAllObjects];
        [_picArray addObjectsFromArray:anArray];
        self.picHasMore = aHasMore;
        self.picCursor = aCursor;
        _picPullRefreshView.needLoadMoreData = self.picHasMore;
        [_picTableView reloadData];       
    }
   
    int position = NSNotFound;
    for (int i=0; i<[_picArray count]; i++) {
        WTPicture *temp = [_picArray objectAtIndex:i];
        if ([temp.picId isEqualToString:aPicture.picId]) {
            position = i;
            break;
        }
    }
   
    if (position != NSNotFound) {
        int picCount = position + 1;
        int rowCount = picCount / 3;
        int mod = picCount % 3;
        if (mod > 0) {
            rowCount++;
        }
        int rowIndex = rowCount-1;
        NSIndexPath *indexPath = [NSIndexPath indexPathForRow:rowIndex inSection:0];
        [_picTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:NO];       
    }
}

- (TMRequest *)pictureDetailVC:(WTPictureDetailVC *)aVC requestForLoadMoreWithCursor:(NSString *)aCursor {
    return [[WTAlbumService sharedInstance] getPictureListByAlbumId:_album.albumId cursor:aCursor];
}

- (void)pictureDetailVC:(WTPictureDetailVC *)aVC didPictureDisplayed:(WTPicture *)aPicture {
   
    NSUInteger count = [self.picArray indexOfObject:aPicture]+1; // 加1是因为计算在第几行的时候,是按照个数来算的
    int rowCount = count / 3;
    int mod = count % 3;
    if (mod > 0) {
        rowCount++;
    }
    int rowIndex = rowCount-1;
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:rowIndex inSection:0];
    [_picTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:NO];
}




#pragma mark - UITableView Delegate Methods

//指定每个分区中有多少行,默认为1
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    int row = [_picArray count] / 3;
    int mod = [_picArray count] % 3;
    if (mod > 0) {
        row ++;
    }
    return row;
}

-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 105;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"WTAlbumPicListCell";
   
    WTAlbumPicListCell *cell = (WTAlbumPicListCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if(cell == nil){
        NSArray *nib = [[NSBundle mainBundle]loadNibNamed:@"WTAlbumPicListCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];
    }
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    int index1 = indexPath.row * 3;
    int index2 = indexPath.row * 3 + 1;
    int index3 = indexPath.row * 3 + 2;
    WTPicture *pic1 = [_picArray objectAtIndex:index1];
    WTPicture *pic2 = nil;
    if (index2 < [_picArray count]) {
        pic2 = [_picArray objectAtIndex:index2];
    }
    WTPicture *pic3 = nil;
    if (index3 < [_picArray count]) {
        pic3 = [_picArray objectAtIndex:index3];
    }
   
    [cell setPic1:pic1 pic2:pic2 pic3:pic3];
    cell.delegate = self;
   
    return cell;
}




#pragma mark -
#pragma mark WTPullRefreshViewDelegate UIScrollViewDelegate Methods

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
    if (scrollView == _picTableView) {
        [_picPullRefreshView scrollViewDidScroll:scrollView];
    }
}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
    if (scrollView == _picTableView) {
        [_picPullRefreshView scrollViewDidEndDragging:scrollView];
    }
}


#pragma mark WTPullRefreshViewDelegate Methods

- (void)pullRefreshViewDidTriggerRefresh:(WTPullRefreshView *)aPullFreshView {
    if (aPullFreshView == _picPullRefreshView) {
        [self getPictureListFromServerByRefresh:YES];
    }
}

- (void)pullRefreshViewDidTriggerLoadMore:(WTPullRefreshView *)aPullFreshView {
    if (aPullFreshView == _picPullRefreshView) {
        [self getPictureListFromServerByRefresh:NO];
    }
}


@end

你可能感兴趣的:(fenye)