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

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

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

我只是将项目转换为ARC并设置了按钮。他们工作,但一旦被按下后,他们保持突出渐变。

为了设置它们,我只是在故事板和IBOutlets上更改了类,并且我选择了我在viewDidLoad上放弃的渐变。

任何想法可能是什么问题?

EDIT: I've been spending more time with it and it appears to be that the problem only happens when the button is on a UITableView. It works OK when it is on a UIViewController

EDIT #2: according to the NSLogs, when the container is a UIViewController, the gradient is back to normal when a button is pressed:

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(Scale to Fill)都是一样的。将其更改为重绘不会改变行为。

2
额外 编辑
意见: 1

1 答案

有负责正常/高亮渐变绘图的检查:

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

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


根据你的日志,我发现它有趣的转载了这个问题,它似乎是突出显示的状态在 touchesEnded 处被捕获的竞争条件(尝试保持点击大约一秒钟 - 国家将在 touchesEndednormal )。原因需要进一步调查,作为解决方法,您可以使用以下代码:

-(void) setHighlighted:(BOOL)highlighted
{
    NSLog(@"setHighlighted %@", highlighted ? @"Y": @"N");
    [super setHighlighted:highlighted];
    [self setNeedsDisplay];
}
2
额外
我已经添加了NSLogs。显然,当按钮在tableView上时,按下后它不会恢复正常。
额外 作者 Marcal,
我会尽快尝试。然而,最重要的是,我真的很想知道为什么只发生在桌面上。我用这个按钮做了一个自定义键盘作为参考。奇怪的是,当在tableview上调用自定义键盘时,它表现得非常正常。完全没问题...
额外 作者 Marcal,
解决方法很好,非常感谢。我会很高兴,但要找出这个问题来自哪里。再次感谢!
额外 作者 Marcal,
谢谢,这很有趣,请参阅答案更新。
额外 作者 A-Live,
@Marcal现在当你再次提到它,我有一个示例项目来测试,我可以确认在根UIView而不是在tableView单元格上添加一个按钮相同的问题。它必须是子类实现的问题,我不能在建议的解决方法中看到任何错误,直到您想覆盖 setNeedsDisplay 并在那里更改突出显示。但是,可能还有其他相关问题,我也想了解问题的根源,以更好的方式解决问题。
额外 作者 A-Live,