用drawRect +普通蓝色选择自定义UITableViewCell
我有一个自定义的UITableViewCell。所有绘图都在drawRect:方法中完成,并且不添加子视图。 绘图工作正常,滚动速度很好。 但问题在于选定的单元格。我想选择的行为就像它通常会:用drawRect +普通蓝色选择自定义UITableViewCell
- 蓝色渐变的颜色选择
- 反向文本颜色
- 动画取消选择
我一直没能实现全部三种。
第一次尝试:
设置selectionStyle = UITableViewCellSelectionStyleNone并做drawRect方法选择的颜色。 用这种方法,我能够实现前两件事,但取消选择是即时的。所以一秒选择蓝色,下一秒取消选择。我没有得到好的淡出。
第二次尝试:
selectionStyle = UITableViewCellSelectionStyleBlue 利用该方法我的细胞是所有梯度蓝色选中时。我拥有的文本不可见。虽然淡出效果很好。
第三次尝试:
设置selectionStyle = UITableViewCellSelectionStyleBlue并设置selectedBackgroundView到我设置的backgroundColor一个透明的蓝色一个UIView。 这里的问题是,selectedBackgroundView(尽管名称)绘制在我的正常内容之上。所以如果selectedBackgroundView不透明,我看不到文字。如果它是透明的,我可以看到文字,但是选择颜色变得“褪色”并且看起来不正确。
什么是实现所有三个要点的正确方法?
好的。所以对我自己的问题的答案...不要继承自定义绘图的UITableViewCell。相反,子类UIImageView或UIView。
这篇文章有如何做它一个很好的说明:
http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html
我建议使用第二次尝试与手势识别器结合使用。检查用户是否按下单元格,如果是,请将该单元格中的文本颜色设置为黄色(或蓝色?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。
的问题不在于文字的颜色应该被反转。它通常是黑色的,但这也是不可见的。问题似乎是蓝色渐变不透明。我的单元格中也有一张图片,在选择时也不可见。所以这个建议是行不通的。 – Kobski 2011-05-31 07:41:39