@SVM12

Как запретить передачу события(например touched) родительскому представлению Superview?

Вообщем есть родительская View (Room Scheme View).
Есть дочерний выезжающий полупрозрачный TableView.

Сейчас после тапа(select) в TableView, это тап передается дальше родительской View(Room Scheme View)

Как сделать так, чтобы этот тап не передавался родительской View(Room Scheme View)?

1082894659dc4367987b5c07d3c9f911.png
  • Вопрос задан
  • 154 просмотра
Пригласить эксперта
Ответы на вопрос 3
Vo0ne
@Vo0ne
work hard
Может Вам вот это поможет?
Ответ написан
tikhonov666
@tikhonov666
iOS, Swift, Objective-C
Ту информацию, которую вы дали мало. Потому тап не может просто так передаваться родителю. Что собственно я только что и проверил. Проверьте по каким именно вьюшкам происходит тап, например в этом методе контроллера.

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        for touch in touches {
            print(touch.view)
        }
    }
Ответ написан
@SVM12 Автор вопроса
Временно решил проблему следующим образом:

RoomSchemeView.h:
/// необрабатываемая зона, в этой области тапы не обрабатываются
@property (nonatomic, assign) CGRect unprocessedRect;


RoomSchemeView.m
- (void)tap:(UIGestureRecognizer *)gr
{
    CGPoint point = [gr locationInView:self];
    // проверяем находится ли точка в необрабатываем зоне
    if (!CGRectEqualToRect(self.unprocessedRect, CGRectZero) && CGRectContainsPoint(self.unprocessedRect, point)) {
        NSLog(@"tap with point %@ in unprocessed rect %@", NSStringFromCGPoint(point), NSStringFromCGRect(self.unprocessedRect));
        return;
    }
    ...
}


RoomSchemeViewController.m:
- (void)showTableView
{
    if (!self.tableIsVisible) {
        self.tableView.frame = CGRectMake(-self.tableView.frame.size.width, self.tableView.frame.origin.y, self.tableView.frame.size.width, self.tableView.frame.size.height);
        [UIView animateWithDuration:.3 animations:^{
            self.tableView.frame = CGRectMake(0, self.tableView.frame.origin.y, self.tableView.frame.size.width, self.tableView.frame.size.height);
        } completion:^(BOOL finished) {
            self.tableIsVisible = YES;
            self.roomSchemeView.unprocessedRect = self.tableView.frame;
        }];
    }
}

- (void)hideTableView
{
    if (self.tableIsVisible) {
        self.tableView.frame = CGRectMake(0, self.tableView.frame.origin.y, self.tableView.frame.size.width, self.tableView.frame.size.height);
        [UIView animateWithDuration:.3 animations:^{
            self.tableView.frame = CGRectMake(-self.tableView.frame.size.width, self.tableView.frame.origin.y, self.tableView.frame.size.width, self.tableView.frame.size.height);
        } completion:^(BOOL finished) {
            self.tableIsVisible = NO;
            self.roomSchemeView.unprocessedRect = CGRectZero;
        }];
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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