UIButton не соприкасается даже в полной зоне
Я имею UIBUtton
в UICollectionViewCell
как показывают в изображении. Я установил действие touchUpInside в xib. Я установил фоновое изображение кнопки розового цвета и ярлыка желтого цвета. UIButton
идет в верхней части этикетки. Теперь проблема в том, что UIButton
если не получить сенсорное событие в розовой области, оно получит только сенсорное событие в оранжевой области. почему это так.
- (IBAction)checkButtonTap:(id)sender event:(id)event
{
DLog(@"%s",__func__);
}
O скрытый вид перекрывает кнопку, из-за которой событие касания не дошло до кнопки.
3 ответа
Просто чтобы убедиться, что я понимаю вашу проблему, у вас есть UICollectionView
в желтом и твоем UIbutton
в розовом, правильно?
Если это так, кажется, что вы хотите перехватить событие touchUpInside за пределами супервидения вашей кнопки желтым цветом. Вы можете посмотреть на этот ответ, который имеет дело с видом проблемы.
Даже если вы, наконец, найдете решение своей проблемы, уточните мой ответ, если вы хотите взаимодействовать с UIButton
который не находится внутри фрейма его суперпредставления, вам может понадобиться реализовать метод - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
супервизии (здесь UICollectionViewCell
):
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
if (!self.clipsToBounds && !self.hidden && self.alpha > 0) {
for (UIView *subview in self.subviews.reverseObjectEnumerator) {
CGPoint subPoint = [subview convertPoint:point fromView:self];
UIView *result = [subview hitTest:subPoint withEvent:event];
if (result != nil) {
return result;
}
}
}
return nil;
}
(спасибо Ноам!)
К сожалению, был скрытый вид, который перекрывает кнопку, из-за которой событие касания не доходило до кнопки.
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget: собственное действие:@selector(imageTapped:)]; [название кнопки addGestureRecognizer: tapGesture]; buttonname.userInteractionEnabled = YES;
- (IBAction) imageTapped: (UITapGestureRecognizer *) gestRecognizer { if(gestRecognizer.state == UIGestureRecognizerStateRecognized) { [buttonname становиться FirstResponder]; } }