2012-03-06 2 views
1

Я подклассифицировал UIButton для рисования графики, но «addTarget» не будет работать.SubClassing UIButton, но я не могу получить «addTarget: action: forControlEvents:» выполнить?

- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents 

Я ничего не делал с внесением изменений в этот метод.

Картинка для кнопок работает на «прикосновениях».

Если я использую стандартный UIButton, то «addTarget» отлично работает.

Не уверен, что мне не хватает ???

ТНХ

#import <UIKit/UIKit.h> 

@interface CButton : UIButton 
{ 
    CGContextRef c; 
    int myState; 
} 
@end 

#import "CButton.h" 

@implementation CButton 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
    } 
    //NSLog(@"init state: %d", self.state); 
    return self; 
} 


- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    // myState = 1; 
    myState = !myState; 
    // NSLog(@"BeginState: %d", self.state); 

    [self setNeedsDisplay]; 
} 


- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ 
    // myState = 0; 
    // NSLog(@"EndState: %d", self.state); 
    // [self setNeedsDisplay]; 

} 

- (void)drawRect:(CGRect)rect 
{ 
    // Drawing code 

} 
@end 
+0

Это не ответит на ваш вопрос, но подклассификация 'UIButton' обычно приводит к катастрофе. Я бы попробовал подклассифицировать 'UIControl'. Это немного больше работы, но вы будете счастливы в долгосрочной перспективе. –

+0

Согласен, мне всегда говорили, что подклассы UIButton - плохая идея. – stephenmuss

+0

Просьба показать подкласс '@ interface' и реализовать методы initWithFrame:' ​​и 'initWithCoder:'. – Costique

ответ

3

Вы должны вызвать супер из обработчиков событий, когда вы все сделали обработку событий. Как еще кнопка узнает о прикосновениях, чтобы назвать ваше действие?

например.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    // myState = 1; 
    myState = !myState; 
    // NSLog(@"BeginState: %d", self.state); 

    [self setNeedsDisplay]; 

    [super touchesBegan:touches withEvent:event]; // you need this 
} 

Это, как говорится, комментарии к исходному сообщению прав, подклассов UIButton может получить сложно. Но похоже, что у вас есть вещи под контролем (в основном). Удачи!

+0

Мне нужно было сделать супер для обоих касанийBegan и touchhesEnded ... thx – Woof

Смежные вопросы