IBAction не запускается при добавлении viewDidLoad

У меня есть несколько IBActions, прикрепленных к кнопкам UIB. IBActions работают нормально, пока я не добавлю следующий код:

- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"View Did Load");
    [self addGestureRecognizersToView:drawImage];
}

После того, как я добавлю этот кусок кода, IBActions не запускаются. Кнопки UIB подсвечиваются, когда я их касаюсь, но ни один из кодов IBAction не срабатывает.

Вот мой код addGestureRecognizer:

- (void)addGestureRecognizersToView:(UIImageView *)theView {
    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
    [panGesture setMaximumNumberOfTouches:2];
    [panGesture setMinimumNumberOfTouches:1];
    //panGesture.delegate = drawImage;
    [theView addGestureRecognizer:panGesture];
    [panGesture release];

    UITapGestureRecognizer *doubleFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)];
    [doubleFingerTap setNumberOfTapsRequired:2];
    [self.view addGestureRecognizer:doubleFingerTap];
    [doubleFingerTap release];

    UITapGestureRecognizer *singleFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
    [singleFingerTap setNumberOfTapsRequired:1];
    [self.view addGestureRecognizer:singleFingerTap];
    [singleFingerTap release];
}

Если я закомментирую код singleFingerTap, он будет работать. Я предполагаю, что я не должен использовать alloc, так как я уже выделил это однажды в doubleFingerTap?

Есть идеи о том, чего мне здесь не хватает?

2 ответа

Решение

Вы одним нажатием пальца мешает нормальному поведению кнопки. Вы должны убедиться, что прикосновения проходят беспрепятственно.

[singleFingerTap setCancelsTouchesInView:NO];

Похоже, UITapGestureRecognizer перехватывает сигналы, которые в противном случае обрабатывались бы кнопками UIB.

Ты можешь использовать gestureRecognizer:shouldReceiveTouch::

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    return (touch.view != self.button1 && 
            touch.view != self.button2);
}

Кроме того, вы можете взломать цепочку респондента.

Другие вопросы по тегам