带有drawRect +正常蓝色选择的自定义UITableViewCell

Posted

技术标签:

【中文标题】带有drawRect +正常蓝色选择的自定义UITableViewCell【英文标题】:Custom UITableViewCell with drawRect + normal blue selection 【发布时间】:2011-05-31 06:35:03 【问题描述】:

我有一个自定义 UITableViewCell。所有的绘图都是在 drawRect: 方法中完成的,没有添加任何子视图。 绘图工作正常,滚动速度很好。 但问题出在选定的单元格上。我希望选择的行为与正常情况一样:

蓝色渐变选择颜色 反转文本颜色 动画取消选择

我没能做到这三个。

第一次尝试: 设置 selectionStyle = UITableViewCellSelectionStyleNone 并在 drawRect 方法中做选择颜色。 使用这种方法,我能够实现前两件事,但取消选择是即时的。所以前一秒它被选择为蓝色,下一秒它被取消选择。我没有得到很好的淡出效果。

第二次尝试: selectionStyle = UITableViewCellSelectionStyleBlue 使用这种方法,我的单元格在选择时都是渐变蓝色。我的文字不可见。不过,淡出效果很好。

第三次尝试: 设置 selectionStyle = UITableViewCellSelectionStyleBlue 并将 selectedBackgroundView 设置为 UIView 我将 backgroundColor 设置为透明蓝色。 这里的问题是 selectedBackgroundView (尽管名称)被绘制在我的正常内容之上。所以如果 selectedBackgroundView 不透明,我看不到文字。如果它是透明的,我可以看到文本,但是选择颜色会“褪色”并且看起来不正确。

实现所有三个要点的正确方法是什么?

【问题讨论】:

【参考方案1】:

好的。所以我自己的问题的答案......不要将 UITableViewCell 子类化为自定义绘图。而是子类化 UIImageView 或 UIView。

这篇文章很好地描述了如何做到这一点:http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html

【讨论】:

【参考方案2】:

我建议将第二次尝试与手势识别器结合使用。检查用户是否按下了某个单元格,如果是,则将该单元格中的 textcolor 设置为黄色(或者蓝色的反转是什么?xD)。

示例代码:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
    if (touch.view isKindOfClass:[UIButton class]]) 
        //do something with that view, for example: 
        //change the color of the text in that view, 
        //or invert it ;)
        return YES;
    
    return NO;

或者,您可以将 UIGestureRecognizer 附加到该按钮。这样,您就可以在选择器中插入名为的类。

按照您的要求,可能会有更好的选择。这只是我想到的,如果你已经有 2/3 点工作,这应该可以帮助你获得 3/3。

【讨论】:

问题不在于文本颜色应该反转。它通常是黑色的,但这也是不可见的。问题似乎是蓝色渐变不透明。我的单元格中也有一个图像,并且在选择时也不可见。所以这个建议是行不通的。

以上是关于带有drawRect +正常蓝色选择的自定义UITableViewCell的主要内容,如果未能解决你的问题,请参考以下文章

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

带有用于突出显示的图像的自定义 UITableViewCell

对于drawRect使用,谨慎使用!

带有弹出框的自定义选择,打开时更改颜色

子类化 UIToolbar 并覆盖 drawRect: - UIBarButtonItems 不显示

带有身份检查器的自定义 Xcode 选择器