重新加载tableview的活动单元格

时间:2015-01-09 12:10:56

标签: ios objective-c uitableview

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

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

等待您的回复。

代码

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

- (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;

    }


}

问候: Syed Meesum Ali

初级软件开发人员

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

最简单的方法是:

[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,否则您的表格可能会导致应用崩溃。