首页 > 代码库 > 更新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

核心: