使用drawRect +普通的蓝色select自定义UITableViewCell

我有一个自定义的UITableViewCell。 所有绘图都在drawRect:方法中完成,并且不添加子视图。 绘图工作正常,滚动速度很好。 但问题在于选定的单元格。 我希望select的行为通常是这样的:

  • 蓝色渐变select颜色
  • 倒置的文字颜色
  • animation取消select

我没有能够实现这三个。

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

第二次尝试:
selectionStyle = UITableViewCellSelectionStyleBlue使用此方法,我的单元格在选中时全部为渐变蓝色。 我有的文字是不可见的。 虽然淡出效果很好。

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

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

好。 所以对我自己的问题的答案…不要inheritance自定义绘图的UITableViewCell。 相反,子类UIImageView或UIView。

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

我build议使用第二次尝试结合手势识别器。 检查用户是否按下某个单元格,如果是,则将单元格中的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附加到该button。 这样,你可以得到插入到select器中的类。

可能有更好的select来做你所问的。 这只是我想到的,如果你已经有2/3点的工作,这应该帮助你得到3/3。