UITableView через UIScrollView

Для моих нужд у меня есть UITableView, непосредственно добавленный под UISCrollView:

--- Главный интерфейс пользователя

-------- UITableView

-------- UIScrollView

Поэтому, когда я прокручиваю свой scrollview, я изменяю смещение содержимого моего tableview. Работает отлично. Но когда я попытался выбрать ячейку, я не смог поймать метод делегата:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

Есть чем заняться? Я попытался создать подкласс UIScrollView и реализовать:

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

Он работает, но я не могу прокрутить свой UIScrollView ...


person Pete    schedule 05.02.2013    source источник
comment
Похоже, ваше представление прокрутки улавливает все события касания, поскольку оно охватывает представление таблицы.   -  person egghese    schedule 05.02.2013
comment
Да, именно поэтому я хотел бы знать, есть ли способ передать событие касания в представления под ним ...   -  person Pete    schedule 05.02.2013
comment
Вероятно, вам следует перенаправить все события касания в tableview и сохранить все другие события касания в uiscrollview, на данный момент вы должны направить все в табличное представление через - (void) touchesBegan: (NSSet *) touch withEvent: (UIEvent *) событие. Хотя это можно реализовать, пересмотрите свою логику. То, что вы делаете, неправильно. Будет другой способ добиться того, чего вы хотите.   -  person egghese    schedule 05.02.2013
comment
Почему у вас есть прокрутка над просмотром таблицы? Вы уверены, что это должно быть там?   -  person Fogmeister    schedule 05.02.2013
comment
Это должно ответить на ваш вопрос: stackoverflow.com/questions/11480201/   -  person SIGKILL    schedule 05.02.2013
comment
Да, потому что у меня есть два UITableView. Вы скажете, что я могу управлять прокруткой с помощью метода делегата tableview, но в одном из моих tableview есть специальная вставка. Я вынужден сделать это с помощью прозрачного UIScrollView   -  person Pete    schedule 05.02.2013
comment
Похоже, вы слишком усложняете это.   -  person Fogmeister    schedule 05.02.2013


Ответы (1)


Попробуй это,

-(void)handleSingleTap:(UILongPressGestureRecognizer *)gestureRecognizer{
    CGPoint p = [gestureRecognizer locationInView:myScroll];
    NSIndexPath *indexPath = [myTable indexPathForRowAtPoint:p];
    [myTable selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
    [self tableView:myTable didSelectRowAtIndexPath:indexPath];
}

вам нужно использовать UITapGestureRecognizer ...

UITapGestureRecognizer *tpgr = [[UITapGestureRecognizer alloc]
                                initWithTarget:self action:@selector(handleSingleTap:)];
tpgr.numberOfTapsRequired = 1;
[myScroll addGestureRecognizer:tpgr];
person Aziz    schedule 05.02.2013
comment
Это хороший ответ, и я завершаю эту ссылку: stackoverflow.com/questions / 7667151 /. Метод selectRowAtIndexPath никогда не вызывает метод делегата tableView. Спасибо за чаевые :) - person Pete; 05.02.2013
comment
Я не понимаю, зачем вам нужен делегат для вашего жеста - person Pete; 05.02.2013
comment
в моем случае я использую один из методов делегата, если вы этого не сделаете, вы можете удалить его, он все равно будет работать отлично. - person Aziz; 05.02.2013