用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。

+0

的问题不在于文字的颜色应该被反转。它通常是黑色的,但这也是不可见的。问题似乎是蓝色渐变不透明。我的单元格中也有一张图片,在选择时也不可见。所以这个建议是行不通的。 – Kobski 2011-05-31 07:41:39