在UITableView中为部分添加背景图像

时间:2012-07-31 13:07:28

标签: objective-c ios xcode uitableview

是否可以在uitableview中更改每个部分的背景图片?

我想在uitableview中为每个部分添加背景图片 有谁知道我该怎么做?

提前致谢!

喜欢这张图片 - >周三,周四和周五分别提供不同的背景图片

enter image description here

编辑我想为星期四图像2添加图像1作为星期四图像3星期五和..... 我该如何指定?

修改

这个用于创建节目标题的代码我想要背景

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {

if(section == 0)
    return @"Monday";
else if(section == 1){
    return @"Tuesday";
}else if(section == 2){
    return @"Wednesday";
} else if(section == 3){
    return @"Thuesday";
} else if(section == 4){
    return @"Friday";
} else if(section == 5){
    return @"Saturday";
}else
    return @"Sunday";

}

4 个答案:

答案 0 :(得分:1)

您可以根据indexPath更改cellForRowAtIndexPath委托方法中的背景,如下所示:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"TaskCellRow";

    UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    int maxRow = 3;

    if (cell == nil)
    {
        cell =  [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        cell.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed: [NSString stringWithFormat: @"background_image%i.png", MIN(indexPath.row, maxRow)]]];
    }
    else
    {
        UIImageView *background = (UIImageView *)cell.backgroundView;
        background.image = [UIImage imageNamed: [NSString stringWithFormat: @"background_image%i.png", MIN(indexPath.row, maxRow)]];
    }

    return cell;
}

// To change header backgrounds

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    int maxRow = 3;

    UIImageView *headerView = [[UIImageView alloc] initWithImage:[UIImage imageNamed: [NSString stringWithFormat: @"background_image%i.png", MIN(section, maxRow)]]];

    return headerView;
}

然后,您只需创建图像,编号为所需的数量标题/行,即。 background_image0.png,background_image1.png,background_image2.png,...等等。 MIN将根据您决定的最大背景限制金额。希望有所帮助。

编辑:根据Henri的评论更改了cellForRowAtIndexPath。我忽略了,谢谢!这是为了兼容ARC。

答案 1 :(得分:1)

您可以使用:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

为节标题指定任何类型的UIView。这是另一种委托方法:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section

允许您指定高度。

使用表的宽度和第二个方法的高度来分配/初始化第一个UIView,然后向其添加任意数量的视图,例如用于背景的UIImageView,然后是标题的标签。

答案 2 :(得分:0)

ezekielDFM给出的迭代(并且主要是纠正)示例。请注意,此代码不兼容ARC(之前的示例可能是)。

// To change cell backgrounds
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"TaskCellRow";

    UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    int maxRow = 3;

    if (cell == nil)
    {
        cell =  [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

        UIImageView *imageView = [[UIImageView alloc] initWithImage: [UIImage imageNamed: [NSString stringWithFormat: @"background_image%i.png", MIN(indexPath.row, maxRow)]]] autorelease];

        cell.backgroundView = imageView;
    } else {
        // Reusing, we need to swap out the image of the background
        cell.backgroundView.image = [UIImage imageNamed: [NSString stringWithFormat: @"background_image%i.png", MIN(indexPath.row, maxRow)]];
    }

    return cell;
}

// To change header backgrounds
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    int maxRow = 3;

    UIImageView *headerView = [[[UIImageView alloc] initWithImage:[NSString stringWithFormat:@"background_image%i.png", MIN(section, maxRow)]] autorelease];

    return headerView;
}

答案 3 :(得分:0)

因为我猜不可能更改表视图节的背景图像。如果您想要这样的要求,请尝试使用单元格行作为章节。即,对于每一行,作为表格的一部分&在那里添加1个不同标签的表格视图。它将满足您的需求。或者每行取