重新加载 tableview 的活动单元格

Reloading Active cells of tableview

我正在 iOS 上开发面向 iOS 7.0 及更高版本的应用程序。 现在,我的问题是如何重新加载屏幕上可见的 UITableView 行。我正在使用动态单元格。

实际上,在选择一个选项时,我正在更改一些颜色,例如每个单元格的标题颜色,但是那些已经加载到屏幕上的单元格没有改变,如果我正在加载整个 table 那么它需要很久了。

等待您的回复。

代码

//单击此按钮颜色正在更新

- (IBAction)btnDone:(id)sender {

appDel.selectedMood=_moodDetView.str;

appDel.barColor=_moodDetView.backgroundColor;

self.navigationController.navigationBar.barTintColor = _moodDetView.backgroundColor;

//[self.mainTblView reloadData];

[self.menuView setBackgroundColor:appDel.barColor];

[_moodDetView setHidden:YES];

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath     *)indexPath
  {
    //For menu contents
    if (tableView.tag==2) {
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
            cell.textLabel.textColor = [UIColor whiteColor];
            cell.textLabel.font = [UIFont fontWithName:@"Futura" size:14.0];
            cell.textLabel.textAlignment = NSTextAlignmentCenter;
            cell.backgroundColor = [UIColor clearColor];
        }

        switch (indexPath.row) {
            case 0:
            {
                cell.textLabel.text=@"Select Mood";
            }
                break;
            case 1:
            {
                cell.textLabel.text=@"Search by Author";
            }
                break;
            case 2:
            {
               cell.textLabel.text=@"Search by Category";
            }
                break;
            case 3:
            {
                  cell.textLabel.text=@"Favorites";
            }
                break;
            case 4:
            {
                    cell.textLabel.text=@"Feeds";
            }
                break;

            default:
                break;
        }
        return cell;
    }

    //for main table
    else{

    // Configure the cell...

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    FeedCustomCell* CELL=( FeedCustomCell *)cell;

    CELL.cellImageView.layer.cornerRadius=CELL.cellImageView.frame.size.width/2;

    CELL.cellImageView.clipsToBounds=YES;

    CELL.gesRec=[[CustomTapGestureRecognizer alloc]initWithTarget:self action:@selector(authorBtnTouched:)];

    [CELL.lblAuthName setTextAlignment:NSTextAlignmentJustified];

    [CELL.lblAuthName setTextColor:[AppDelegate invertColor:appDel.barColor]];

        NSString * str=[NSString stringWithFormat:@"%@",[[dataArray objectAtIndex:indexPath.row] objectForKey:@"authorId"]];

    UIImage * img=[UIImage imageNamed:str];

    CELL.cellImageView.image=img?img:[UIImage imageNamed:@"n3"];

    [CELL.lblAuthName addGestureRecognizer:CELL.gesRec];

    CELL.gesRec.authorImage=CELL.cellImageView.image;

    NSString * authName=[[dataArray objectAtIndex:indexPath.row] objectForKey:@"authorName"];

    [CELL.lblAuthName setText:authName];

    [CELL.gesRec setAuthorId:(int)str.integerValue];

    [CELL.gesRec setAuthorName:authName];

    [CELL.txtViewQuote setTextColor:appDel.barColor];

    CELL.txtViewQuote.text=[[dataArray objectAtIndex:indexPath.row] objectForKey:@"quoteTxt"];

    CGSize sizeThatShouldFitTheContent = [CELL.txtViewQuote sizeThatFits:CELL.txtViewQuote.frame.size];

    CELL.heightConstraintOfTxtView.constant = sizeThatShouldFitTheContent.height;

    [CELL.contentView sizeToFit];

    return CELL;

    }


}

问候: 赛米森阿里

初级软件开发人员

如果您实现自定义单元格子类化 UITableViewCell,则可以实现 prepareForReuse 方法。您可以在该方法中重置一些属性示例、alpha、选择状态。

最简单的方法是:

[myTable reloadRowsAtIndexPaths:myTable.indexPathsForVisibleRows withRowAnimation:UITableViewRowAnimationAutomatic];

但是,由于您正在寻找更优化的方法,因此以下方法会更好:

单击按钮时,在目标方法中,遍历可见单元格,并在每个单元格中进行相关更改。

- (IBAction)btnDone:(id)sender {

    for (UITableViewCell* cell in yourTable.visibleCells) {

        if ([cell isKindOfClass:[FeedCustomCell  class]]) {

            [((FeedCustomCell*)cell).lblAuthName setTextColor:[AppDelegate invertColor:appDel.barColor]];
        }
    }
}

这应该比重新加载(绘制)所有可见单元格方式快。

ALSO,忠告。对不同类型的单元格使用不同的 reuseIdentifer,否则您的table可能会导致应用程序崩溃。