当我们在iphone sdk中有多个部分时,如何改变同一部分中不同单元格的大小和颜色

时间:2011-05-21 06:51:06

标签: iphone cocoa-touch ios uitableview

我想更改指定部分中不同行(单元格)的大小和颜色,这样任何人都可以给我建议如何管理它。 实际上我在相同的视图上使用4节,我想改变单元格颜色和单元格大小 第4节我在“heightForRowAtIndexPath”方法中编写了以下代码

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.section==0)
    {
        return 44;
    }
    else if(indexPath.section==2)
    {
        return 44;

    }
    else if(indexPath.section==1)
    {
        return 100;
    }
    else 
    {
        if (indexPath.row==0) 
        {
            label6.frame=CGRectMake(0, 0, 320, 44);
            label6.backgroundColor=[UIColor yellowColor];
            return 44;
        }

        else if(indexPath.row==1)
            {
                return 100;
                label6.frame=CGRectMake(0.0, 0,120,100); 
                label6.backgroundColor=[UIColor purpleColor];
                label7 .frame=CGRectMake(122, 0,200,100); 
                label7.backgroundColor=[UIColor purpleColor];

            }
            else
            {
                label6.frame=CGRectMake(0.0, 0,120,40); 
                label7 .frame=CGRectMake(122, 0,200,40); 

                return 44;
            }

        }


}

谢谢&问候, 普里。

2 个答案:

答案 0 :(得分:1)

现在从上面的问题来看,据我所知你想改变代码中某些部分的高度和单元格颜色,请尝试下面的代码

为了更改部分中特定单元格的高度,请复制+粘贴表格视图的行方法的高度,这是您在代码中已经完成的委托协议,这是我的代码中的视图

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{

    switch (indexPath.section) {
        case 0:
            if(indexPath.row ==2)
            {
                return 25;
            }
            break;

        case 1:
            if(indexPath.row ==2)
            {
                return 25;
            }
            break;


    }

    return tableView.rowHeight;   
}

现在在下一部分我所做的是更改某些行的单元格颜色,我希望代码是自我解释的。在索引路径方法中选择行的单元格并添加此代码。

- (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] autorelease];
    }

    if(indexPath.section==0)
    {
        cell.textLabel.text = [arr objectAtIndex:indexPath.row];

        if(indexPath.row ==2)
        {
            //changing cell color
            cell.backgroundColor = [UIColor grayColor];
        }

    }
    else if(indexPath.section ==1)
    {
        if(indexPath.row ==2)
        {
            //changing cell color
            cell.backgroundColor = [UIColor blueColor];
        }
        cell.textLabel.text = [arr1 objectAtIndex:indexPath.row];
    }

    return cell;
}

希望这会有所帮助.....

答案 1 :(得分:0)

您无法在tableView:heightForRowAtIndexPath:方法中更改单元格的颜色。您需要在tableView:cellForRowAtIndexPath:方法中执行此操作。但是,您应该在此方法中传递自定义高度。所以它会成为,

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    switch (indexPath.section) {
    case 1:
        return 100;

    case 3:
        if (indexPath.row == 1) {
            return 100;
        }

    default:
        return 44;
    }
}

您可以在

中进行所有单元格自定义
- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {
    ...

    if ( indexPath.section == 3 ) {
        switch ( indexPath.row ) {
        case 0:
            cell.label6.frame=CGRectMake(0, 0, 320, 44);
            cell.label6.backgroundColor=[UIColor yellowColor];
            break;

        case 1:
            cell.label6.frame=CGRectMake(0.0, 0,120,100); 
            cell.label6.backgroundColor=[UIColor purpleColor];
            cell.label7.frame=CGRectMake(122, 0,200,100); 
            cell.label7.backgroundColor=[UIColor purpleColor];
            break;

        default:
            cell.label6.frame=CGRectMake(0.0, 0,120,40); 
            cell.label7.frame=CGRectMake(122, 0,200,40);
            break;
        }
    }
}

假设label6label7cell的成员。