UITableView中的自定义UIButton在按下后会保持高亮显示

时间:2012-05-25 06:20:17

标签: ios xcode uitableview uibutton

我已经实现了一个自定义的UIButton,发布在cocoacontrols.com:

http://cocoacontrols.com/platforms/ios/controls/imageless-gradient-buttons

我刚刚将项目转换为ARC并设置了按钮。它们起作用,但在按下一次后,它们会突出显示渐变。

要设置它们,我只是改变了故事板和IBOutlets上的类,我选择了我想在viewDidLoad上使用的渐变。

关于可能出现什么问题的任何想法?

编辑:我花了更多的时间用它,似乎问题只发生在按钮位于UITableView上时。当它在UIViewController上时它可以正常工作

编辑#2 :根据NSLogs,当容器是UIViewController时,按下按钮时渐变恢复正常:

2012-05-26 10:53:17.950 GradientButtons[11507:f803] highlighthed
2012-05-26 10:53:18.040 GradientButtons[11507:f803] highlighthed
2012-05-26 10:53:18.140 GradientButtons[11507:f803] Normal

但是当容器是UTableViewController时,该按钮仍保留高亮度渐变:

2012-05-26 10:55:20.969 GradientButtons[11507:f803] highlighthed
2012-05-26 10:55:21.069 GradientButtons[11507:f803] highlighthed

我已经检查了viewContentMode,所有按钮,UIView和UITableView(缩放到填充)都是一样的。将其更改为重绘不会改变行为。

1 个答案:

答案 0 :(得分:2)

负责正常/突出显示的渐变绘图的检查:

   if (self.state == UIControlStateHighlighted)
        gradient = self.highlightGradient;
    else
        gradient = self.normalGradient;

您需要设置断点或添加NSLog以查看是否在那里选择了正常渐变。如果没有,则下一步是覆盖添加状态日志的普通UIButton drawRect。使用它而不是彩色按钮来查看这是否是您的表格的标准UIButton行为(例如,您可能会在单击按钮后突出显示单元格,这会强制子视图也被突出显示)


根据你的日志我觉得有趣的是再现了这个问题,似乎是突出状态被touchesEnded捕获的竞争条件(尝试按住一下大约一秒钟 - 状态将在normaltouchesEnded。需要进一步调查原因,作为一种解决方法,您可以使用以下代码:

-(void) setHighlighted:(BOOL)highlighted
{
    NSLog(@"setHighlighted %@", highlighted ? @"Y": @"N");
    [super setHighlighted:highlighted];
    [self setNeedsDisplay];
}