Обнаружьте, если бесспорный, UIView был затронут среди другого UIViews

У меня есть 3 UIViews, разделенные на уровни сверху одного большого uiview. Я хочу знать, касается ли пользователь лучшего, и не заботятся о других. У меня будет несколько кнопок во втором UIView и UITable в 3-м UIView.

Проблема, я включаю userInteractionEngabled на первом представлении, и это работает, но все другие представления отвечают таким же образом, даже если я выключаю его. Если я отключаю userInteractionEnabled на self.view, ни один из них не отвечает. Я также не могу обнаружить, какое представление было затронуто в touchesBegan методе делегата.

Мой код:

UIView *aView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 150)];
aView = userInteractionEnabled = YES;
[self.view addSubview:aView];

UIView *bView = [[UIView alloc] initWithFrame:CGRectMake(0, 150, 320, 50)];
bView.userInteractionEnabled = NO;
[self.view addSubview:bView];

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
//This gets called for a touch anywhere
}
31
задан Michael Currie 7 September 2015 в 20:12
поделиться

1 ответ

Чтобы проверить, был ли затронут определенный вид внутри другого представления, вы можете использовать hitTest.

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event;

В вашей пользовательской реализации touchesBegan проверять каждое касание в наборе касаний. Точку для метода hitTest можно получить с помощью метода

- (CGPoint)locationInView:(UIView *)view;

, где представлением является ваш superView (тот, который содержит другие представления).

EDIT: Вот быстрая пользовательская реализация:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    CGPoint locationPoint = [[touches anyObject] locationInView:self];
    UIView* viewYouWishToObtain = [self hitTest:locationPoint withEvent:event];
}

Я надеюсь, что это было полезно, Пол

62
ответ дан 27 November 2019 в 21:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: