У меня есть несколько вложенных представлений, таких как:
Во-первых, есть большой UIView. Внутри этого есть еще один UIView. И внутри этого есть класс MyNiceButtons, который наследуется от UIView. Итак, у меня есть:
UIView> UIView> MyNiceButtons (= UIView).
Подробно, UIView создает UIImageView и добавляет его как дочернее представление к себе, которое представляет графическую кнопку. Поэтому внутри реализации класса MyNiceButtons у меня есть этот код для обработки события касания на изображении фальшивой кнопки:
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject]; // i just need single touches
// just to see which view is affected
UIView *tview = [touch view];
CGRect rect = tview.frame;
rect.origin.x = rect.origin.x + 20.0f;
tview.frame = rect;
[tview setBackgroundColor:[UIColor yellowColor]];
if ([touch view] == self.fakeButtonImageView) {
NSLog(@"touch on fake button detected");
}
}
Все представления в иерархии имеют userInteractionEnabled = YES. Касание приходит к первому представлению в иерархии (родитель родительского).
UIView *tview = [touch view];
Возвращает только родительский элемент родителя, но не UIImageView, где пользователь фактически нажал.
Какой трюк распознать, если касание было на кнопке UIImageView?