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:
La vue est renvoyée en tant que vue d'en-tête de UITableView
. Ne fonctionne pas car la vue rest en haut même si la vue de la table est déplacée vers le bas.
La vue est statique en haut, le cadre de la vue de table commence en bas de la vue transparente. Cela ne fonctionne pas car lorsque la vue de table est déplacée, elle est visible à travers la vue transparente.
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:
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.