静态UITableViewCell backgroundView

时间:2012-05-19 19:36:08

标签: ios xcode uitableview

在我的项目中,我有带静态单元格的tableViews以及带有动态单元格的tableViews。为了定制我已经设法在细胞上获得渐变背景(分组的sytle)。

它适用于动态TableViews,因为我根据行的位置(顶部,底部,中间或单个)在cellForRowAtIndex中设置背景视图。

但是,当我尝试在静态tableview单元格上实现它时,它不起作用。我试图实现cellForRowAtindex ......但它崩溃了。

有人有想法吗?

更新:cellForRow的代码..

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];    

    UACellBackgroundView *bgw=[[UACellBackgroundView alloc]init];

    if (indexPath.row==0) {

        bgw.position = UACellBackgroundViewPositionTop;
        cell.backgroundView=bgw;

    }else if (indexPath.row==2){

        bgw.position = UACellBackgroundViewPositionBottom;
        cell.backgroundView=bgw;

    }else {
        bgw.position = UACellBackgroundViewPositionMiddle;
        cell.backgroundView=bgw;
    }

  //  cell.backgroundView=bgw;


    return cell;
}

顺便说一下,我从这里得到了背景视图:http://code.coneybeare.net/how-to-make-custom-drawn-gradient-backgrounds和这里:http://pessoal.org/blog/2009/02/25/customizing-the-background-border-colors-of-a-uitableview/

如果有人有兴趣

2 个答案:

答案 0 :(得分:1)

看起来你不是所有UITableViewCell,你需要分配单元格。

例如:

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        // alloc the UITableViewCell
        // remeber if you are not using ARC you need to autorelease this cell
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    cell.textLabel.text = @"Cell Name";
    cell.detailTextLabel.text = @"Cell Detail";

    return cell;
}

添加此声明:

if (cell == nil) {
    // alloc the UITableViewCell
    // remeber if you are not using ARC you need to autorelease this cell
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

答案 1 :(得分:1)

如果您有一个带静态表的UITableViewController子类,则不应尝试将单元格出列。
相反,您应该向super询问单元格。超类将从故事板中获取单元格,您可以对其进行配置。

这样的事情:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];

    UIView *selectedBackgroundView = [[UIView alloc] init];
    cell.selectedBackgroundView = selectedBackgroundView;
    cell.selectedBackgroundView.backgroundColor = [UIColor mb_tableViewSelectionColor];
    return cell;
}

也适用于所有其他属性。