在我的项目中,我有带静态单元格的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/
如果有人有兴趣
答案 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;
}
也适用于所有其他属性。