У меня есть 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
}
Чтобы проверить, был ли затронут определенный вид внутри другого представления, вы можете использовать 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];
}
Я надеюсь, что это было полезно, Пол