我有一个自定义的UITableViewCell。所有绘图都在drawRect:方法中完成,并且不添加任何子视图。 绘图工作正常,滚动速度很好。 但问题在于选定的细胞。我希望选择的行为与通常的一样:
我无法实现这三种目标。
第一次尝试:
设置selectionStyle = UITableViewCellSelectionStyleNone并在drawRect方法中执行选择颜色。
通过这种方法,我能够实现前两个方面,但取消选择是即时的。所以一秒钟选择蓝色,下一秒钟取消选择。我没有得到很好的淡出。
第二次尝试:
selectionStyle = UITableViewCellSelectionStyleBlue
使用此方法,我的单元格在选中时都是渐变蓝色。我的文字不可见。然而,淡出效果很好。
第三次尝试:
设置selectionStyle = UITableViewCellSelectionStyleBlue并将selectedBackgroundView设置为UIView,我将backgroundColor设置为透明蓝色。
这里的问题是selectedBackgroundView(尽管名称)是在我的正常内容之上绘制的。因此,如果selectedBackgroundView不透明,我看不到文本。如果它是透明的,我可以看到文字,但选择颜色变得“褪色”,看起来不正确。
实现所有三个要点的正确方法是什么?
答案 0 :(得分:2)
行。所以我自己的问题的答案...不要将UITableViewCell子类化为自定义绘图。而是继承UIImageView或UIView。
这篇文章很好地描述了如何做到这一点:
http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html
答案 1 :(得分:0)
我建议将第二次尝试与手势识别器结合使用。检查用户是否按下单元格,如果是,则将该单元格中的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附加到该按钮。这样,您就可以在选择器中获得名为inserted的类。
可能有更好的选择来做你所要求的。这只是我的想法,如果你已经有2/3点工作,这应该可以帮助你获得3/3。