首页 > 代码库 > 更新tableView的某个cell
更新tableView的某个cell
更新tableView的某个cell
异步加载完数据后更新某个cell,这应该是非常常见的使用方法了,我们经常会用reloadData.
效果:
源码:
//// RootViewController.m// DataTableView//// Copyright (c) 2014年 Y.X. All rights reserved.//#import "RootViewController.h"#import "SDWebImage.h"@interface RootViewController ()<UITableViewDelegate, UITableViewDataSource>@property (nonatomic, strong) UITableView *showTableView;@property (nonatomic, strong) NSArray *dataArray;@end@implementation RootViewController- (void)viewDidLoad{ [super viewDidLoad]; // 初始化tableView _showTableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain]; _showTableView.delegate = self; _showTableView.dataSource = self; [self.view addSubview:_showTableView]; // 下载数据源 NSString *oneImageURL = @"http://pic.cnitblog.com/avatar/607542/20140226182241.png"; [[SDWebImageManager sharedManager] downloadWithURL:[NSURL URLWithString:oneImageURL] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) { } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) { _dataArray = @[image]; // 更新某个cell的数据 [_showTableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:UITableViewRowAnimationFade]; }];}#pragma mark - UITableView delegate & dataSource- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return 2;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *reusedID = @"YouXianMing"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reusedID]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reusedID]; } // 第一个cell if (indexPath.row == 0) { if ([_dataArray count] > 0) { cell.imageView.image = _dataArray[0]; } } // 第二个cell if (indexPath.row == 1) { if ([_dataArray count] > 0) { cell.imageView.image = _dataArray[0]; } } return cell;}- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ return 70;}@end
核心:
最主要的是,reloadRowsAtIndexPaths能有动画效果.
附录:
重新给了高度值也是有动画的哦:)
源码:
//// RootViewController.m// DataTableView//// Copyright (c) 2014年 Y.X. All rights reserved.//#import "RootViewController.h"#import "SDWebImage.h"@interface RootViewController ()<UITableViewDelegate, UITableViewDataSource>@property (nonatomic, strong) UITableView *showTableView;@property (nonatomic, strong) NSArray *dataArray;@end@implementation RootViewController- (void)viewDidLoad{ [super viewDidLoad]; // 初始化tableView _showTableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain]; _showTableView.delegate = self; _showTableView.dataSource = self; [self.view addSubview:_showTableView]; // 下载数据源 NSString *oneImageURL = @"http://wallpapers.wallbase.cc/rozne/wallpaper-573934.jpg"; [[SDWebImageManager sharedManager] downloadWithURL:[NSURL URLWithString:oneImageURL] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) { NSLog(@"%f", (float)receivedSize/(float)expectedSize); } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) { _dataArray = @[image]; // 更新某个cell的数据 [_showTableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:UITableViewRowAnimationFade]; }];}#pragma mark - UITableView delegate & dataSource- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return 2;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *reusedID = @"YouXianMing"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reusedID]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reusedID]; } // 第一个cell if (indexPath.row == 0) { if ([_dataArray count] > 0) { cell.imageView.image = _dataArray[0]; } } // 第二个cell if (indexPath.row == 1) { if ([_dataArray count] > 0) { cell.imageView.image = _dataArray[0]; } } return cell;}- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ // 加载完数据后动态展开 if (indexPath.row == 0) { if ([_dataArray count] > 0) { return 200; } } return 70;}@end
核心:
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。