2012-05-03 4 views
2

Я использую paintcodeapp для рисования моей пользовательской кнопки. Я начертить два различных состояния «нажата» и «нормальный»redraw UIButton при нажатии

Мне нужно позвонить setNeedsDisplay, когда кнопка находится в «нажатом состоянии»

Я тогда послать две ничьи с использованием self.highlighted в drawRect: методом

Я попытался с:

- (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

Мне также пришлось вызвать setNeedsDisplay после задержки 0,2 секунды. Я отправлю код в другом ответе – 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). Мне нужно установить фон и показать его немедленно, даже если он замедляет пользовательский интерфейс пользователя. Решение состоит в том, чтобы убедиться, что оно выполнено на основном потоке.

dispatch_async(dispatch_get_main_queue(), { 
    testButton?.backgroundColor = .greenColor() 
}) 
Смежные вопросы