带有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