2014-01-28 81 views
1

我在我的應用程序中劃分了UIButton,並且在完成按下按鈕時突出顯示顏色仍然存在很多次。我無法弄清楚究竟是什麼原因造成的,因爲它似乎只是偶然發生,但似乎約有50%的時間發生。我很確定這是可重複的。當我在UITableViewCell中有一個按鈕時,我經常會發生這種情況,並且在表視圖仍在滾動時點擊它。UIButton子類突出顯示錯誤(突出顯示在點​​擊或觸摸後仍然存在或存在)

我在覆蓋子類中setHighlighted方法的方式有什麼問題嗎?這是我的實現:

@implementation SCPFormButton 

- (id)initWithFrame:(CGRect)frame label:(NSString *)label 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     UILabel *buttonLabel = [[UILabel alloc] init]; 
     buttonLabel.attributedText = [[NSAttributedString alloc] initWithString:[label uppercaseString] attributes:kButtonLabelAttributes]; 
     [buttonLabel sizeToFit]; 
     buttonLabel.frame = CGRectMake(kMaxWidth/2 - buttonLabel.frame.size.width/2, kStandardComponentHeight/2 - buttonLabel.frame.size.height/2, buttonLabel.frame.size.width, buttonLabel.frame.size.height); 
     [self addSubview:buttonLabel]; 

     self.backgroundColor = kFormButtonColorDefault; 
    } 
    return self; 
} 

- (void)setHighlighted:(BOOL)highlighted 
{ 
    self.backgroundColor = highlighted ? kFormButtonColorHighlighted : kFormButtonColorDefault; 
    [self setNeedsDisplay]; 
} 

@end 

回答

5

我會嘗試打電話給supersetHighlighted覆蓋。的確,Apple docs for UIControl狀態:

如果控件高亮顯示,則指定爲YES;否則不。默認情況下,控件不會突出顯示。 UIControl自動設置和清除此狀態時,觸摸進入和退出期間跟蹤和觸摸了。

因此,似乎有一種與UIControl相關的狀態處理正在進行。

如果這沒有幫助,我會嘗試添加日誌追蹤,以便您可以檢查處理觸摸時按鈕處於哪種狀態。

+0

爲什麼,當然。不能相信我沒有想到這一點。我把它放在我的代碼中,看看這個bug是否仍然出現。 –

+0

問題似乎消失了,但我必須長按按鈕才能突出顯示。快速按下不會顯示突出顯示的動畫,但會觸發動作。還有什麼我錯過了? –

+0

你會在'setHighlighted'內放置一個NSLog並檢查它是否在短按的情況下被調用?可能你可能需要檢測到一個觸摸(而不是觸摸),並從那裏處理突出顯示的狀態... – sergio

0

您錯過了對super的調用。但是,無論如何,不​​建議子類UIButton,我會嘗試使用setBackgroundImage:forState來代替。

+0

我沒有看到UIButton作爲任何默認UIKit類的任何問題,你能否詳細說明這一點請 ? – Macistador

相關問題