使用drawRect +普通蓝色选择自定义UITableViewCell

时间:2011-05-31 06:35:03

标签: iphone ios uitableview

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

  • 蓝色渐变选择颜色
  • 反转文字颜色
  • 动画取消选择

我无法实现这三种目标。

第一次尝试:
设置selectionStyle = UITableViewCellSelectionStyleNone并在drawRect方法中执行选择颜色。 通过这种方法,我能够实现前两个方面,但取消选择是即时的。所以一秒钟选择蓝色,下一秒钟取消选择。我没有得到很好的淡出。

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

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

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

2 个答案:

答案 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。