2012-05-25 41 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