ios - UITableView 内的自定义 UIButton 在按下后保持突出显示

标签 ios xcode uitableview uibutton

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

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

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

为了设置它们,我只是更改了 Storyboard 和 IBOutlet 上的类,并且在 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(缩放到填充)都是相同的。将其更改为重绘不会改变行为。

最佳答案

有一个检查负责正常/突出显示的渐变绘制:

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

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


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

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

关于ios - UITableView 内的自定义 UIButton 在按下后保持突出显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10749434/

相关文章:

ios - 如何在 iOS 应用程序中按段落(中等)中断选择?

ios - 解析取消订阅 channel iOS 不工作

ios - 是否可以同时为 UIPickerView 和 UITableview 设置动画

xcode - 将可变字典添加到可变字典以转换为 JSON

ios - Swift/XCode 编译 Archive 一个非常小的 App 需要 25 分钟

ios - iOS在UITableView上从左滑动,同时保持滑动以删除

ios - 在基于标签栏的应用程序上使用 UINavigationController 将数组添加到 UITableView

ios - UIScrollView 中的 UIView 没有出现

ios - 从 UILabel 触发 PickerView 使其以模态方式显示在屏幕底部,而不是隐藏/取消隐藏它

Swift 编译器很难处理这个表达式