2012-05-03 83 views
2

我使用paintcodeapp繪製自定義按鈕。 我已經得出兩個不同的狀態「按下」和「正常」按下時重繪UIButton

我需要調用setNeedsDisplay當按鈕處於「按下狀態」

然後我派遣兩場平局中drawRect:方法

使用 self.highlighted

我已經試過:

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     [self addTarget:self action:@selector(didDetectEvent:) forControlEvents:UIControlEventTouchDown]; 
     [self addTarget:self action:@selector(didDetectEvent:) forControlEvents:UIControlEventTouchUpInside]; 
     [self addTarget:self action:@selector(didDetectEvent:) forControlEvents:UIControlStateNormal]; 

    } 
    return self; 
} 

-(void)didDetectEvent:(id)sender { 
    [self setNeedsDisplay]; 
} 

,但它不工作。 有什麼建議嗎?

回答

0

嘗試用:

-(void)didDetectEvent:(id)sender { 
    UIButton *btn = (UIButton *)sender; 
    [btn setNeedsDisplay]; 
} 

我認爲它是在具有您要管理的按鈕一般視圖實現。

+0

我也不得不延遲0.2秒後調用setNeedsDisplay。我會在其他答案中發佈代碼 – Luka

0
- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 

     [self addTarget:self action:@selector(didDetectEvent:) forControlEvents:UIControlEventAllTouchEvents]; 
    } 
} 


    -(void)didDetectEvent:(id)sender { 
     [self setNeedsDisplay]; 
     [self performSelector:@selector(setNeedsDisplay) withObject:nil afterDelay:0.2]; 
} 

這個工程。我並不完全相信這是最好的解決方案。

1

我有這個相同的問題(使用Swift)。我需要設置背景並立即顯示它,即使它會降低用戶的UI。解決方案是確保它在主線程上完成。

dispatch_async(dispatch_get_main_queue(), { 
    testButton?.backgroundColor = .greenColor() 
})