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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ava实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),可运行高分资源 Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值