Adăugați un recunoscător de gest la antetul tableView nu funcționează?

Știu că un "antet de vizualizare a tabelului" (cea mai de sus parte a unei vizualizări de tabel) este o vizualizare Deci încerc să adaug un UITapGestureRecognizer la el, dar nu funcționează ...

codul este simplu:

- (void)tap:(UITapGestureRecognizer *)recognizer
{
   //do something
}

UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc]    initWithTarget:self action:@selector(tap:)];
[self.tableView.tableHeaderView addGestureRecognizer:recognizer];

Orice sfaturi aici să le pese? Mulțumesc mult

0
Unde numești acest cod?
adăugat autor Omar Abdelhafith, sursa
Îl numești în init sau în vedereDidLoad sau în alte locuri?
adăugat autor Omar Abdelhafith, sursa

2 răspunsuri

Pentru inceput Asigurați-vă că apelați această secțiune de cod în vizualizareaDidLoad sau viewWillAppear

UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc]    initWithTarget:self action:@selector(tap:)];
[self.tableView.tableHeaderView addGestureRecognizer:recognizer];

În al doilea rând, vă rugăm să vă asigurați că

self.tableView.tableHeaderView

nu este nulă, adăugați

NSLog([self.tableView.tableHeaderView description]);

Și verificați consola pentru ieșire

Am încercat doar codul dvs. și robinetul a fost primit corect

0
adăugat
Mulțumesc, vizualizarea capului meu pentru tabel este "UILabel". Eu adaug "NSLog ([self.tableView.tableHeaderView descriere]);" la codul meu, nu funcționează încă .... Dar am constatat că în consola, există ceva de genul "userInteractionEnabled = NO". apoi adaug o linie de cod la acea eticheta: "label.userInteractionEnabled = YES", in cele din urma functioneaza !! știi motivul? :-)
adăugat autor joshz, sursa
@joshz: Este din cauză că interacțiunea cu utilizatorul pe UILabel este dezactivată în mod implicit.
adăugat autor user523234, sursa
De asemenea, este adevărat pentru uiimageview
adăugat autor baskInEminence, sursa

Iată ce lucrează pentru mine: În schimb, adăugați aceasta:

self.tableView.tableHeaderView

Eu adaug recognizer gest pe fiecare UILabel pe tableview.

    -(UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{

    UILabel *headerLabel = [[UILabel alloc]init];
    headerLabel.tag = section;
    headerLabel.userInteractionEnabled = YES;
    headerLabel.backgroundColor = [UIColor greenColor];
    headerLabel.text = [NSString stringWithFormat:@"Header No.%d",section];
    headerLabel.frame = CGRectMake(0, 0, tableView.tableHeaderView.frame.size.width, tableView.tableHeaderView.frame.size.height);


    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(catchHeaderGesture:)];
    tapGesture.cancelsTouchesInView = NO;
    [headerLabel addGestureRecognizer:tapGesture];

    return headerLabel;

    //return nil;
}

-(void)catchHeaderGesture:(UIGestureRecognizer*)sender
{
    UILabel *caughtLabel = (UILabel*)sender.view;

    NSLog(@"header no : %d", caughtLabel.tag);
}

Sper ca te ajuta.

0
adăugat
tableView.tableHeaderView nu este același cu viewForHeaderInSection:
adăugat autor Lord Zsolt, sursa
Atâta timp cât utilizați obj.userInteractionEnabled = YES , atunci ar trebui să funcționeze. Îl folosesc cu tableView.tableHeaderView
adăugat autor Dody Rachmat Wicaksono, sursa
iOS dezvoltatori, România — Moldova
iOS dezvoltatori, România — Moldova
21 participanți

Parteneri: ciupacabra.com, @php_ro, @js_ro, @node_ro, @seo_ro Android: @ro_android