【问题标题】:Custom UIButton inside a UITableView keeps highlighted after being pressedUITableView 中的自定义 UIButton 在被按下后保持突出显示
【发布时间】:2012-05-31 17:48:41
【问题描述】:

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

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

我刚刚将项目转换为 ARC 并设置了按钮。它们可以工作,但在按下一次后,它们会保持高亮渐变。

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

知道可能是什么问题吗?

编辑:我已经花更多的时间来处理它,而且问题似乎只发生在按钮位于 UITableView 上时。在 UIViewController 上运行正常

EDIT #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(缩放至填充)都是一样的。将其更改为重绘不会改变行为。

【问题讨论】:

    标签: ios xcode uitableview uibutton


    【解决方案1】:

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

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

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


    根据您的日志,我发现它很有趣并重现了该问题,这似乎是在touchesEnded 捕获突出显示的状态的竞争条件(尝试按住大约一秒钟 - 状态将是 @ 987654324@touchesEnded)。原因需要进一步调查,作为一种解决方法,您可以使用以下代码:

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

    【讨论】:

    • 我已经添加了 NSLogs。显然,当按钮在 tableView 上时,按下后它不会恢复正常。
    • 我会尽快尝试的。然而,最重要的是,我真的很想知道为什么只发生在表格视图中。我已经使用此按钮作为参考完成了自定义键盘。奇怪的是,当在 tableview 上调用自定义键盘时,它的行为非常正常。完全没问题...
    • @Marcal 现在,当您再次提到它并且我有一个示例项目要测试时,我可以确认在根 UIView 而不是在 tableView 单元格上添加按钮时同样的问题。这一定是子类化实现的问题,在您想要覆盖setNeedsDisplay 并在那里更改highlighted 之前,我看不到建议的解决方法有任何问题。但是,可能还有其他相关问题,我也想了解问题的根源以便更好地解决它。
    • 该解决方法效果很好,非常感谢。我会很好,但是要找出这个问题来自哪里。再次感谢!
    猜你喜欢
    • 2023-03-15
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 2017-05-15
    • 2012-06-26
    • 1970-01-01
    • 2011-04-14
    相关资源
    最近更新 更多