2012-05-25 21 views
2

我实现了自定义的UIButton,张贴在cocoacontrols.com后强调:一个UITableView内自定义的UIButton不断被挤压

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,按钮保持与highligthed梯度:

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(缩放至网络二)。将其更改为重绘不会改变行为。

回答

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]; 
} 
+0

我已经添加了NSLogs。显然,当按钮在tableView上时,按下后它不会恢复正常。 – Marcal

+0

谢谢,这很有趣,看到答案更新。 –

+0

我会尽快尝试。然而,最重要的是,我真的很想知道为什么只发生在桌面上。我用这个按钮做了一个自定义键盘作为参考。奇怪的是,当在tableview上调用自定义键盘时,它表现得非常正常。没有问题... – Marcal