这对于我的普通样式表视图很好,但是对于我的分组样式却不能。我正在尝试自定义选择单元格时的外观。

这是我的代码:

+ (void)customizeBackgroundForSelectedCell:(UITableViewCell *)cell {
    UIImage *image = [UIImage imageNamed:@"ipad-list-item-selected.png"];
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
    cell.selectedBackgroundView = imageView;
}


我已验证正确的单元格确实已传递给此函数。为了使这项工作有效,我需要做些什么?

最佳答案

从您的问题尚不清楚,您是否知道tableViewCell根据其选择状态自动管理显示/隐藏的selectedBackgroundView。除了viewWillAppear之外,还有很多更好的方法可以放置该方法。一种是在您最初创建tableViewCells时,即:

- (UITableViewCell *)tableView:(UITV*)tv cellForRowAtIP:(NSIndexPath *)indexPath {
    UITableViewCell *cell = nil;
    cell = [tv dequeueCellWithIdentifier:@"SomeIdentifier"];
    if (cell == nil) {
        cell = /* alloc init the cell with the right reuse identifier*/;
        [SomeClass customizeBackgroundForSelectedCell:cell];
    }
    return cell;
}


您只需要在该单元的生存期中一次设置selectedBackgroundView属性。适当时,该单元将管理显示/隐藏它。

另一种更干净的技术是将UITableViewCell子类化,并在您子类的.m文件中重写:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    self = [super initWithBla....];
    if (self) {
        UIImageView *selectedBGImageView = /* create your selected image view */;
        self.selectedBackgroundView = selectedBGImageView;
    }
    return self;
}


从那时起,您的单元格应显示其自定义选定的背景,而无需进行任何进一步的修改。它只是工作。

此外,此方法与当前推荐的使用以下UITableView方法在viewDidLoad:中的表视图中注册表视图单元格类的推荐做法更好地配合使用:

- (void)registerClass:(Class)cellClass forCellReuseIdentifier:(NSString *)identifier


您将在表视图控制器的viewDidLoad方法中使用此方法,以便使表视图单元出队实现更短并且更易于阅读:

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.tableView registerClass:[SomeClass class]
           forCellReuseIdentifier:@"Blah"];
}

- (UITableViewCell *)tableView:(UITV*)tv cellForRowAtIP:(NSIndexPath *)indexPath {
    UITableViewCell *cell = nil;
    cell = [tableView dequeueReusableCellWithIdentifier:@"Blah"
                                           forIndexPath:indexPath];
    /* set your cell properties */
    return cell;
 }


只要您已经使用@"Blah"标识符注册了一个类,就可以保证此方法返回一个单元格。

关于ios - 在分组的UITableView中设置选定的UITableViewCell的背景,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17634190/

10-09 16:33