ios – UITableView自定义单元格无法刷新

ios – UITableView自定义单元格无法刷新,第1张

概述关于刷新自定义表格单元格有很多问题,但这个问题很奇怪.我有一个tableView,每个单元格,现在,有一个自定义UILabel和UI ImageView. 目前只有2个细胞.第一个显示日期.当表首次加载时,它会在第一个单元格UILabel中将当前日期显示为字符串. 当我选择第一个单元格时,我会出现一个自定义类来处理所有日期选择.选择日期后,会d出此视图,然后返回到表格视图. 在 – (void)v 关于刷新自定义表格单元格有很多问题,但这个问题很奇怪.我有一个tableVIEw,每个单元格,现在,有一个自定义UILabel和UI ImageVIEw.

目前只有2个细胞.第一个显示日期.当表首次加载时,它会在第一个单元格UILabel中将当前日期显示为字符串.

当我选择第一个单元格时,我会出现一个自定义类来处理所有日期选择.选择日期后,会d出此视图,然后返回到表格视图.

在 – (voID)vIEwDIDAppear上,重新加载tablevIEws数据并显示新选择的日期.

但是,第一个单元格中的标签不会更新.

令人困惑的是,如果我有多个单元格都显示相同的数据,这些将全部刷新并显示新的日期,如预期的那样.看起来索引:0处的单元格行不会刷新.

进一步混淆的是当我查询单元格的UILabel的字符串值时,它返回正确的日期.

- (UItableVIEwCell *)tableVIEw:(UItableVIEw *)tableVIEw cellForRowAtIndexPath:(NSIndexPath *)indexPath{    static Nsstring *CellIDentifIEr = @"Cell";    UItableVIEwCell *cell = [tableVIEw dequeueReusableCellWithIDentifIEr:CellIDentifIEr];    if (cell == nil) {        cell = [[UItableVIEwCell alloc] initWithStyle:UItableVIEwCellStyleDefault reuseIDentifIEr:CellIDentifIEr];        //         // clears the grouped style border from each table cell        //        UIVIEw *clearBgVIEw = [[UIVIEw alloc]initWithFrame:CGRectZero];        [cell setBackgroundVIEw:clearBgVIEw];        // label        UILabel *dl = [[UILabel alloc]initWithFrame:CGRectMake(70.0f,10.0f,screenWIDth-100,50)];        [self setDetailsLabel:dl];        dl = nil;        [[self detailsLabel] setBackgroundcolor:[UIcolor colorWithRed:.1 green:.1 blue:.1 Alpha:.1  ]];        [[self detailsLabel] setTextcolor:[UIcolor colorWithRed:1.0f green:1.0f blue:1.0f Alpha:.3f]];        //icon for each cell        UIImageVIEw *ci = [[UIImageVIEw alloc]initWithFrame:CGRectMake(10.0f,50.0f,50.0f)];        [ci setBackgroundcolor:[UIcolor colorWithRed:.2 green:.2 blue:.2 Alpha:.2]];        [self setCellicon:ci];        ci = nil;        //        // set up vIEws        //        [cell addSubvIEw:[self cellicon]];        [cell addSubvIEw:[self detailsLabel]];    }    // Configure the cell...    [cell setSelectionStyle:UItableVIEwCellSelectionStyleNone];    //populate each by row.    Nsstring *datedisplay = [self formatDate:[self dateCaught]];    NSLog (@"date is %@",datedisplay);   [[self detailsLabel] setText:[self formatDate:[self dateCaught]]];    switch (indexPath.row) { //this needs to be an integer,so return the row of the indexPath.        case 0:            NSLog (@"text for the cell is %@",[[self detailsLabel]text]);            break;        default:            break;    }return cell;

}

解决方法 问题与你传递detailsLabel的方式有关.你把它保存在自己的财产或ivar中

[self setDetailsLabel:dl];

但是只有在单元格无法重复使用时才设置它.当您重复使用单元格时,自我的detailsLabel将设置为先前运行的标签,从而导致各种问题.

最干净的解决方案是创建自己的类,从UItableVIEwCell派生,将创建标签,图标,背景颜色等的初始化代码移动到指定的初始化程序中,并创建用于设置标签文本的属性.有了这个类,您就可以按如下方式简化代码:

UIMyCustomtableVIEwCell *cell = [tableVIEw dequeueReusableCellWithIDentifIEr:CellIDentifIEr];if (cell == nil) {    cell = [[UIMyCustomtableVIEwCell alloc] initWithStyle:UItableVIEwCellStyleDefault reuseIDentifIEr:CellIDentifIEr];}[cell setSelectionStyle:UItableVIEwCellSelectionStyleNone];[[cell detailsLabel] setText:[self formatDate:[self dateCaught]]];// ^--- detailsLabel can be moved to UIMyCustomtableVIEwCell Now
总结

以上是内存溢出为你收集整理的ios – UITableView自定义单元格无法刷新全部内容,希望文章能够帮你解决ios – UITableView自定义单元格无法刷新所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1052031.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存