Нажатие UIButton, это подвид UIView - PullRequest
1 голос
/ 17 января 2012

У меня проблемы с захватом сигналов на UIButton, который является подпредставлением UIView. Вот как настроен мой код:

// in MyClass.m
@interface MyClass ()
@property (nonatomic, retain) UIButton *myButton;
@end

@implementation MyClass
@synthesize myButton;

- (void) buttonTapped:(id) sender {
    NSLog(@"button tapped!");
}

- (id) initWithFrame:(CGRect)frame {
    if (!(self = [super initWithFrame:CGRectZero]))
        return nil;

    myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [myButton setImage:[UIImage imageNamed:@"image.png"] 
                                  forState:UIControlStateNormal];
    [myButton addTarget:self 
                 action:@selector(buttonTapped:)
       forControlEvents:UIControlEventTouchUpInside];
    myButton.exclusiveTouch = YES;
    myButton.frame = CGRectMake(100, 100, 100, 100);
    [self addSubview:myButton];

    return self;
}

- (void) dealloc {
    [myButton release];
    [super dealloc];
}

@end

Кнопка отображается на виде. Цвет кнопки меняется на мгновение, когда я нажимаю на нее. Однако селектор buttonTapped: никогда не вызывается. Есть идеи почему?

Как я могу убедиться, что buttonTapped: действительно является целью myButton?

1 Ответ

1 голос
/ 17 января 2012

Вы можете проверить, что ваш текущий класс является целью, зарегистрировав r

NSLog(@"actions for target %@",[myButton actionsForTarget:self forControlEvent:UIControlEventTouchUpInside]);

Однако я добавил ваш код в тестовый проект (шаблон одного представления), и метод buttonTapped: сработал.

- (void) buttonTapped:(id) sender {
  NSLog(@"button tapped!");
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{


    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];
    self.window.rootViewController = self.viewController;
  UIButton * myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
  [myButton setImage:[UIImage imageNamed:@"image.png"] 
            forState:UIControlStateNormal];
  [myButton addTarget:self 
               action:@selector(buttonTapped:)
     forControlEvents:UIControlEventTouchUpInside];
  myButton.exclusiveTouch = YES;
  myButton.frame = CGRectMake(100, 100, 100, 100);
    [rv.view addSubview:myButton];

    return YES;
}

Проблема в другом.Размещен ли для MyClass весь код .h и .m?

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