Vue transparente en haut d'un UITableView

Lorsque vous ouvrez Mail sur un iPhone et que vous appuyez sur Modifier, select un e-mail et appuyez sur Déplacer, un UITableView s'affiche avec tous les dossiers dans UITableView vous pouvez placer le courrier. En haut se trouve une vue transparente indiquant l'e-mail sélectionné. Lorsque vous déplacez votre doigt vers le bas, la vue rest en place, lorsque vous le déplacez vers le haut, les cellules sont visibles à travers la vue transparente.

Comment Apple a-t-elle configuré cette vue? J'ai pensé à deux façons, mais elles ne fonctionnent pas toutes les deux:

Des idées sur la façon de recréer cet effet?

Vous devez créer votre vue transparente, puis l'append en tant que sous-vue au controller de vue, c'est donc un frère de UITableView . Vous le feriez dans la méthode viewDidLoad() .

 - (void)viewDidLoad { int viewHeight = 50; // Assume myTableView is a UITableView variable myTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height - 44) style:UITableViewStylePlain]; myTableView.scrollIndicatorInsets = UIEdgeInsetsMake(viewHeight, 0, 0, 0); myTableView.contentInset = UIEdgeInsetsMake(viewHeight, 0, 0, 0); UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0,0,self.view.frame.size.width,viewHeight)]; // Configure your view here. myView.backgroundColor = [UIColor colorWithRed:0.0 green:0.7 blue:0.8 alpha:0.75]; [self.view addSubview:myTableView]; [self.view addSubview:myView]; [myView release]; } 

Vous pouvez également configurer votre vue en utilisant un XIB, mais je vais laisser cela comme un exercice pour vous.

Edit: Suppression de l'exigence pour les methods de délégué UITableView et l'affichage d'en-tête personnalisé à l'aide de la propriété contentInset place.

Note: voir les commentaires supplémentaires ci-dessous.

Pour la méthode XIB:

  • Créer un nouveau UIViewController (avec XIB)
  • Ajoutez-y votre UITableView et votre UIView.
  • Faites-les deux sous-vues de l'UIView par défaut (appelé View) et assurez-vous qu'ils sont ajoutés dans le bon ordre. UITableView devrait être le premier dans la list, votre vue devrait être deuxième (ainsi votre vue est au dessus de UITableView).

  • Dans le file .m, implémentez le minimum pour UITableViewDataSource et UITableViewDelegate:

    – (NSInteger) numberOfSectionsInTableView: (UITableView *) tableView;

    – (NSInteger) tableView: (UITableView *) tableView numberOfRowsInSection: section (NSInteger);

    – (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath;

    – (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath;

  • Dans Interface Builder, select la list UITableView et allez dans 'Connection Inspector'. Faites glisser la source de données et déléguez-la à 'Propriétaire du file'.

Enregistrer et exécuter. Tu devrais avoir fini maintenant.