У меня есть представление (parent
) с двумя подпредставлениями, одно сверху (topChild
) другого (bottomChild
).
Если я нажму на экран только topChild
и parent
, получим событие касания.
Что я должен изменить, чтобы распространить событие касания на bottomChild
?
код:
- (void)viewDidLoad
{
[super viewDidLoad];
MYView* parent = [[MYView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
parent.tag = 3;
parent.backgroundColor = [UIColor redColor];
MYView* bottomChild = [[MYView alloc] initWithFrame:CGRectMake(0, 0, 90, 90)];
bottomChild.tag = 2;
bottomChild.backgroundColor = [UIColor blueColor];
[parent addSubview:bottomChild];
MYView* topChild = [[MYView alloc] initWithFrame:CGRectMake(0, 0, 80, 80)];
topChild.tag = 1;
topChild.backgroundColor = [UIColor greenColor];
[parent addSubview:topChild];
[self.view addSubview:parent];
}
Где MYView
- это подкласс UIView
, который регистрирует только touchesBegan
.
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"%d", self.tag);
[super touchesBegan:touches withEvent:event];
}
Результат:
Прикосновение к зеленой области приводит к следующему журналу:
TouchTest[25062:f803] 1
TouchTest[25062:f803] 3
Моей первой идеей было заставить parent
передавать все touchesSomething
звонки своим дочерним элементам, но (A) Я подозреваю, что может быть более простое решение и (B) Я не знаю, какой ребенок отправил событие родителю, и отправка touchesSomething
сообщений дважды одному и тому же представлению может вызвать махинации.
Задав вопрос, я обнаружил эту запись , в которой предлагается переопределить hitTest
, чтобы изменить представление, которое получает прикосновения. Я попробую этот подход и обновлю вопрос, если он работает.