Как передать аргумент в @selector в UITapGestureRecognizer? - PullRequest
7 голосов
/ 16 марта 2012

У меня есть это в моем разделе просмотра заголовка таблицы:

    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(sectionHeaderTapped:)];

Я хочу передать номер секции в методе sectionHeaderTapped, чтобы я мог узнать, какая секция была нажата.

Моя реализация метода выглядит так:

-(void)sectionHeaderTapped:(NSInteger)sectionValue {
    NSLog(@"the section header is tapped ");    
}

Как мне этого добиться?

Ответы [ 2 ]

15 голосов
/ 16 марта 2012

Метод sectionHeaderTapped должен иметь одну из следующих подписей:

- (void)sectionHeaderTapped:(UITapGestureRecognizer *)sender;
- (void)sectionHeaderTapped;

Вы должны выяснить ячейку, которая была повернута, используя координаты касания.

-(void)sectionHeaderTapped:(UITapGestureRecognizer *)gestureRecognizer
{
    CGPoint tapLocation = [gestureRecognizer locationInView:self.tableView];
    NSIndexPath *tapIndexPath = [self.tableView indexPathForRowAtPoint:tapLocation];
    UITableViewCell* tappedCell = [self.tableView cellForRowAtIndexPath:tapIndexPath];
}

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

- (UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section
{
    // ...
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(sectionHeaderTapped:)];
    [headerView addGestureRecognizer:tapGesture];
    return headerView;
}

А потом

-(void)sectionHeaderTapped:(UITapGestureRecognizer *)gestureRecognizer
{
    UIView *headerView = gestureRecognizer.view;
    // ...
}
0 голосов
/ 16 марта 2012

Альтернатива: Вы можете добавить UIButton на tableHeaderView и получить нажатие кнопки.

...