子类化 UItableViewCell 选择

Posted

技术标签:

【中文标题】子类化 UItableViewCell 选择【英文标题】:Subclassed UItableViewCell selection 【发布时间】:2013-10-26 04:23:12 【问题描述】:

我对 UITableViewCell 进行了子类化,这样我就可以提高滚动性能,这对我来说效果很好。

在我的子类中,我有一个名为 seSelected 的方法,看起来像这样

- (void)setSelected:(BOOL)selected animated:(BOOL)animated

    [super setSelected:selected animated:animated];
    
    // Configure the view for the selected state
    if (selected) 
        self.backgroundColor = [UIColor lightGrayColor];
    else
        self.backgroundColor = [UIColor whiteColor];
    

我想知道如何制作它,以便如果我触摸同一个单元格,它会取消选择该单元格并将颜色改回白色?我在 setSelected 中尝试了一些不同的 if 语句,但没有任何效果。

【问题讨论】:

【参考方案1】:

使用这个委托方法

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

并在此处调用管理选定和未选定单元格的方法。

【讨论】:

【参考方案2】:

一种方法是在单元格上设置标签,然后使用它来设置背景颜色。

typedef enum 
    CellSelected = 0,
    CellDeselected
 CellSelection;

在创建单元格时,将标签设置为“CellDeselected”

cell.tag  = CellDeselected;

然后当点击单元格时,只需检查您要在背景中设置哪种颜色。

switch (customCell.tag) 
    case CellSelected:
        self.backgroundColor = [UIColor lightGrayColor];
        break;
    case CellDeselected:
        self.backgroundColor = [UIColor whiteColor];
        break;
    default:
        break;


customCell.tag = !customCell.tag;

【讨论】:

【参考方案3】:

这样做...

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

    str = [YourArray objectAtIndex:indexPath.row];//str is a string variable


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath


    NSString *cellIndentifier = @"cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIndentifier];
    if (cell == nil) 
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIndentifier];
    
    cell.textLabel.text = [reminder objectAtIndex:indexPath.row];

    cell.backgroundColor = [UIColor whiteColor];

    if ([str isEqualToString:[reminder objectAtIndex:indexPath.row]])
    
        cell.backgroundColor = [UIColor grayColor];
    

    return cell;

您可以将其用于您的自定义单元格.....

【讨论】:

【参考方案4】:

使用 UITableViewCell 方法:[cell setSelectedBackgroundView:myBgColorView];。 Apple Documentation。 示例:

UIView *myBgColorView = [[UIView alloc] init];
myBgColorView.backgroundColor = [UIColor greenColor];
[cell setSelectedBackgroundView:myBgColorView];

【讨论】:

【参考方案5】:

设置单元格样式:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

您的代码将正常工作。但是,您只设置颜色选定的单元格。 如果您需要在按下单元格时设置颜色,请覆盖此方法:

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated

【讨论】:

以上是关于子类化 UItableViewCell 选择的主要内容,如果未能解决你的问题,请参考以下文章

想知道如何以编程方式在 swift 3.0 中对 UITableViewCell 进行子类化?

子类化 UITableViewCell 并在 Storyboard 中使用它

iOS:使用 nib 子类化 UITableViewCell,进入 UIView(不是视图控制器)子类

在子类化 UITableViewCell 中重写 Func LayoutSubviews 被称为 Double

使用带有原型单元的自定义 UITableViewCell

自动调整子类 UITableViewCell 子视图的大小