UIButton в пользовательской проблеме UIView

У меня простое (основанное на просмотре) приложение. Я хочу, чтобы при нажатии на пользовательский UIView моя кнопка перемещалась где-то внутри этого представления (например, в точку 10,10).

  1. Мой пользовательский интерфейс UIView - DrawView (DrawView.h и DrawView.m).
  2. RotatorViewController (ч. И. М).

Я добавляю в свой DrawView UIButton, подключаю к розеткам мои DrawView и UIButton. Я добавляю UITapGestureRecognizer в RotatorViewController и @selector (нажмите :). Вот код UITapGestureRecognizer

- (void)viewDidLoad
{
    [super viewDidLoad];
    UIGestureRecognizer *tapGR = [[UITapGestureRecognizer alloc] initWithTarget:drawView action:@selector(tap:)];
    [drawView addGestureRecognizer:tapGR];
    [tapGR release];

}

@selector (коснитесь :)

- (void) tap:(UITapGestureRecognizer *)gesture {
        myButton.transform = CGAffineTransformMakeTranslation(10, 10);
}

Но когда я нажимаю где-нибудь в приложении DrawView, происходит сбой. Вот журнал с консоли

2011-02-23 20:59:24.897 Rotator[7345:207] -[DrawView tap:]: unrecognized selector sent to instance 0x4d0fa80
2011-02-23 20:59:24.900 Rotator[7345:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[DrawView tap:]: unrecognized selector sent to instance 0x4d0fa80'

мне нужна ваша помощь


person Tunyk Pavel    schedule 23.02.2011    source источник


Ответы (2)


Вы сказали :

UITapGestureRecognizer в RotatorViewController и @selector (коснитесь :)

и вы написали: UIGestureRecognizer *tapGR = [[UITapGestureRecognizer alloc] initWithTarget:drawView action:@selector(tap:)];

Это означает, что действия выполняются в делегате drawView, но вы определили селектор tap: в RotatorViewController.

Я думаю, вам просто нужно заменить цель drawView на self

UIGestureRecognizer *tapGR = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];

person klefevre    schedule 23.02.2011

Ошибка указывает на то, что экземпляры класса DrawView не отвечают на сообщения tap:. Я вижу, что вы определили tap: метод в DrawView.m, но объявили ли этот метод в заголовке? Вот так:

DrawView.h

@class UITapGestureRecognizer;
@interface DrawView {
    UIButton *myButton;
}
- (void) tap:(UITapGestureRecognizer *)gesture;
@end
person e.James    schedule 23.02.2011
comment
нет, похоже, что селекторы не нужно объявлять в заголовочном файле. Спасибо за ваши мысли! - person Tunyk Pavel; 23.02.2011