更新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

核心:

更新tableView的某个cell,布布扣,bubuko.com

时间: 2024-10-13 01:01:46

更新tableView的某个cell的相关文章

iOS中关于动态Tableview中的cell数据传输的多线程问题解决之拙见

iOS中关于动态Tableview中的cell数据传输的多线程问题解决之拙见 (2015-12-05 12:48:20)[编辑][删除] 转载▼     首先我们先明确一下问题: 1.因为UI是在主线程中更新的,不能在down数据的同时显示界面,这样会使得下载的时间占用主线程,导致的后果就是你的屏幕就那样的卡死在哪了 2.如果要解觉问题1,就势必要将其下载数据的环节放在其他分线程上来实现,但是这里还会遇见一个问题,分线程的执行是不会有序的,这样,在动态显示的过 程中,cell中的数据就会混乱的变

使用HVTableView动态展开tableView中的cell

效果: 源码: HVTableView.h 与 HVTableView.m // // HVTableView.h // HRVTableView // // Created by Hamidreza Vakilian on 25/11/2013 // Copyright (c) 2013 Hamidreza Vakilian. All rights reserved. // Website: http://www.infracyber.com/ // Email: [email protect

tableview 点击cell改变cell中的label.text的字体颜色,cell复用出现问题的解决方案2

关于Cell的复用问题,上次已经说了一种,但似乎那种方法不是最好的,所以说,今天下午根据别人提示,想到了此方法.还是老样子,可能不是最好的,但是实现了功能,至少比上次的要好一些. 题目要求:定义固定数据源,然后让tableview的行上各自显示第几行,然后点击选中的时候,字体颜色会变为红色,取消选中的时候字体变为黑色.然后最后的时候要输出选中的结果 解题思路:首先实现tableView的几个协议,然后定义一个模型,在模型中定义一个标识,然后通过点中的时候标识,然后判断标识解决Cell的复用. M

tableView怎么改变cell的分割线!!!

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) { [self.tableView setSeparatorInset:UIEdgeInsetsMak

UITableView (4): 在TableView中移动cell和Section 从TableView中删除cell和section

一  .问题:你想用流畅直观的动画来移动和拖拽TableView中的cell和section 方案: 用moveSection:toSection:方法把一个Section移动到新位置. 用moveRowAtIndexPath:toIndexPath:方法把一个cell从当前位置移动到新位置 例子: 创建一个TableView并在其中加载3个Section,每个Section有3个cell #pragma - mark 初始化数据 - (NSMutableArray *)newSectionWi

IOS 开发中 TableView的文本Cell高度的自适应,UILabel自动换行适应

最后的运行效果: 需求: 1.表格里的UILable要求自动换行 2.创建的tableViewCell的高度会自动适应内容的高度 一.用xcode构建项目,创建一个有tableView的视图,用纯代码的形式实现: 1.创建一个UIViewController类,定义一个UITableView,实现TableView的委托和数据源协议 // //  TableViewController.h //  AdaptiveCell // //  Created by swinglife on 14-1-

OC TableView中自定义Cell实现文字滚动效果

需求:有一个动态需要更新的TableView,每一个Cell显示的内容从网络获取,并且Cell中有一个需要显示文字的Label,当文字太长的时候,不能完全显示,所以采用跑马灯的样式 实现:1. IB的方式(??) 2.纯代码(?) IB的层次关系 实现的功能: 1.动态获取文字的实际长度 2.设置滚动的收尾位置 代码: 1.TitleRolling.h @interface TitleRolling : UIViewController -(void) startScroll : (UIScro

动态切换tableView中的cell的种类

为什么要动态切换tableView中cell的种类呢?如果项目经理不出这种需求,你也就见不到这篇文章了:) 效果: 源码: 首先,你要准备3种cell,直接继承系统的就行了. // // RootViewController.m // ChangeCell // // Copyright (c) 2014年 Y.X. All rights reserved. // #import "RootViewController.h" #import "YellowCell.h&quo

蓝懿iOS培训日志15 tableView和自定义Cell(1)

今天学了很多新内容  需要时间消化,笔记如下: tableView的分组 通过判断section==?来实现不同section有不同行数 需要去掉行与行之间的线时 把separator改一下default(默认)改成None    default时有线 可以改变线的颜色 TableHeaderView  和 TableFooterView tableView上面需要显示内容时 用headerView (比如点开某条微博 上面显示微博内容 下面是评论列表) 需要显示在列表尾端的用FooterVie