Подкласс UIButton, но я не могу заставить "addTarget: action: forControlEvents:" выполнить? - PullRequest
1 голос
/ 06 марта 2012

У меня есть подкласс UIButton для рисования графики, но «addTarget» не будет работать.

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

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

Графика кнопки хорошо работает на «прикосновениях».

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

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

1012 * ТНХ *

#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

1 Ответ

3 голосов
/ 06 марта 2012

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

, например

- (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 может оказаться сложным. Но похоже, что у вас все под контролем (в основном). Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...