Почему мой UITableView не отвечает на touchSegan? - PullRequest
2 голосов
/ 21 марта 2011

Я использую этот метод

- (void)tableView:(UITableView *)tableView touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    UITouch *touch = [[event allTouches] anyObject];
    if ([myPickerView isFirstResponder] && [touch view] != myPickerView) {
        [myPickerView resignFirstResponder];
    }
    [super touchesBegan:touches withEvent:event];
}

, но мой tableView не реагирует на прикосновения (применяется к представлению работает, но это покрывается tableView!)

Если этоневозможно - есть ли еще какая-нибудь возможность захватить касания "из окна"?

Ответы [ 3 ]

12 голосов
/ 21 марта 2011

Нет такого метода делегата, как tableView:touchesBegan:withEvent:. Если вы хотите переопределить -touchesBegan:withEvent: для вашего UITableView, вам нужно будет создать подкласс UITableView. Большинство подобных проблем часто лучше реализовать с помощью UIGestureRecognizer. Выше я бы, вероятно, использовал UITapGestureRecognizer.

11 голосов
/ 20 февраля 2013

Я нашел самый простой способ сделать это - добавить распознаватель жестов в представление UITableViewController.

Я поместил этот код в viewDidLoad UITableViewController:

UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
[self.view addGestureRecognizer:tap];

И реализовал обработчик событий:

- (void)handleTap:(UITapGestureRecognizer *)recognizer
{
    // your code goes here...
}

EDIT: Вы также можете добавить распознаватель жестов в табличное представление, просто измените [self.view addGestureRecognizer:tap]; на [self.tableView addGestureRecognizer:tap];

0 голосов
/ 11 ноября 2013

Вот решение подкласса UITableView, которое работало для меня.Создайте подкласс UITableView и переопределите hitTest: withEvent: как показано ниже:

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

    static UIEvent *e = nil;

    if (e != nil && e == event) {
        e = nil;
        return [super hitTest:point withEvent:event];
    }

    e = event;

    if (event.type == UIEventTypeTouches) {
        NSSet *touches = [event touchesForView:self];
        UITouch *touch = [touches anyObject];
        if (touch.phase == UITouchPhaseBegan) {
            NSLog(@"Touches began");
        }
    }
    return [super hitTest:point withEvent:event];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...