Comment rendre l'en-tête UITableView sélectionnable?

J'ai fait un en-tête de section personnalisé pour UITableView, qui inclut des controls comme le contrôle segmenté, UIImageView, etc. Il apparaît avec succès, mais il n'est pas tappable donc je ne peux pas interagir avec ses controls.

J'ai besoin de savoir comment puis-je rendre cette vue en-tête sélectionnable?

Il n'y a aucun moyen de le faire avec UITableViewDelegate.

Vous devez append un UITapGestureRecognizer à votreHeaderView

UITapGestureRecognizer *singleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(gestureHandler:)]; [singleTapRecognizer setDelegate:self]; singleTapRecognizer.numberOfTouchesRequired = 1; singleTapRecognizer.numberOfTapsRequired = 1; [yourHeaderView addGestureRecognizer:singleTapRecognizer]; -(void) handleGesture:(UIGestureRecognizer *)gestureRecognizer; //do in this method whatever you want 

POUR Swift 3.0

 let tapGesture = UITapGestureRecognizer(target: self, action: #selector(YOURVIEWCONTROLLER.TapGestureRecognizer(_:))) yourHeaderView.addGestureRecognizer(tapGesture) func TapGestureRecognizer(gestureRecognizer: UIGestureRecognizer) { //do your stuff here } 

peut-être cela aidera.

Codage heureux.

Créez une section personnalisée headerView .. et ajoutez-y Tap geste.

 UITapGestureRecognizer * recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; //This method will be called on Tap of section header - (void)handleTap:(UITapGestureRecognizer *)sender { //Do the action on Tap } 

Voici ce qui a fonctionné pour moi:

 override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { let v = UITableViewHeaderFooterView() v.textLabel?.text = "Header Text" let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap)) tapRecognizer.delegate = self tapRecognizer.numberOfTapsRequired = 1 tapRecognizer.numberOfTouchesRequired = 1 v.addGestureRecognizer(tapRecognizer) return v } func handleTap(gestureRecognizer: UIGestureRecognizer) { print("Tapped") } 

Solution simple pour Swift 3.0

  func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { let v = UITableViewHeaderFooterView() let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap)) v.addGestureRecognizer(tapRecognizer) return v } func handleTap(gestureRecognizer: UIGestureRecognizer) { controller?.view.endEditing(true) } 

Vous pouvez simplement append un UIButton à votre vue d'en-tête (ou votre vue d'en-tête peut être un UIButton lui-même).

 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{ static NSSsortingng *cellIdentifier = @"cellIdentifier"; UITableViewCell *cell = (UITableViewCell*)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; UIButton *cellButton = (UIButton*)[cell viewWithTag:1]; [cellButton addTarget:self action:@selector(premiumSectionClicked:) forControlEvents:UIControlEventTouchUpInside]; return cell; } -(void)buttonTapped:(id)sender{ } 

Créez une vue personnalisée utilisée comme vue de tête de section et implémentez la méthode - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event , elle sera appelée lorsque votre doigt tapera dessus.

Ma mise en œuvre dans Swift:

Dans votre UITableViewController :

 let myView = MyView() let tapRecognizer = UITapGestureRecognizer(target: myView, action: "handleTap") myView.addGestureRecognizer(tapRecognizer) self.tableView.tableHeaderView = myView 

Dans MyView :

 class MyView: UIView { func handleTap() { // Handle touch event here } } 

solution rapide pour cela:

 let tapR : UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "gotoHeaderArticle") tapR.delegate = self tapR.numberOfTapsRequired = 1 tapR.numberOfTouchesRequired = 1 yourView.addGestureRecognizer(tapR) 

Puis mettre en œuvre

 func gotoHeaderArticle() { } 

Assurez-vous que votre viewcontroller appelant adhère à UIGestureRecognizerDelegate

Mise à jour pour Swift 3.1

 let tapGesture = UITapGestureRecognizer(target: self, action: #selector(TapGestureRecognizer(gestureRecognizer:))) yourView.addGestureRecognizer(tapGesture) func TapGestureRecognizer(gestureRecognizer: UIGestureRecognizer) { //do your stuff here print("Gesture") } 

Voici ce qui a fonctionné pour moi

  -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{ static NSSsortingng *cellIdentifier = @"cellIdentifier"; YourHeaderTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; cell.imageView.image = [image imageNamed:@"imageName"]; cell.segmentedControl.tag = section; [cell.segmentedControl addTarget:self action:@selector(action:) forControlEvents:UIControlEventValueChanged]; return cell; } - (void)action:(id)sender{ UISegmentedControl *segmentedControl = (UISegmentedControl *) sender; NSLog(@"selected section:%ld",(long)segmentedControl.tag); }