53 votes

Comment créer et utiliser visuellement des cellules statiques dans un UITableView intégré à un UIViewController ?

J'utilise XCode 4.2 et j'ai construit mon interface utilisateur à l'aide de Storyboards. J'ai besoin de créer une vue qui a du contenu au-dessus et au-dessous d'un UITableView et je peux y parvenir en utilisant un UIViewController. Un UITableViewController ne vous permet pas d'ajouter du contenu au-dessus ou au-dessous du tableau. Vous pouvez utiliser l'en-tête et le pied du tableau, mais cela ne convient pas à ce que je souhaite réaliser.

J'ai maintenant un UIViewController dans lequel est intégré un UITableView. Je peux ajuster la hauteur et la largeur de l'UITableView en conséquence, ce qui me donne la disposition de l'interface utilisateur que je recherche.

Je peux personnaliser les cellules statiques dans l'UITableView mais lorsque j'essaie de construire, j'obtiens l'erreur suivante :

Configuration illégale : Les vues de table statiques ne sont valables que si elles sont intégrées dans des instances UITableViewController.

Ma question est la suivante : comment les autres contournent-ils ce problème ? Créer un tableau avec des cellules statiques et les disposer visuellement est très agréable, mais apparemment, cela n'est pas autorisé pour une raison que je ne comprends pas. Je ne peux pas passer à un UITableViewController en raison de mes exigences en matière de présentation visuelle.

Toute aide serait grandement appréciée.

134voto

pedro.m. Points 2743

Vous pouvez y parvenir dans Xcode 4.5 et les versions ultérieures, en supposant que votre application est destinée à iOS 6+.

Dans le Storyboard, créez simplement un UIViewController avec un conteneur de vue dans sa vue principale. Puis reliez ce conteneur de vue à un UITableViewController qui contient des cellules statiques.

Comme ça :

enter image description here

Vous n'avez pas besoin d'une seule ligne de code. Il suffit de cliquer sur le contrôle, de faire glisser et de sélectionner l'intégration. Le contenu du contrôleur de vue est géré pour vous.

5voto

Canopus Points 2299

Vous avez raison. Dans le storyboard, vous ne pouvez pas avoir un tableView avec des cellules statiques intégrées dans un viewController. Une façon de contourner ce problème (je ne l'ai pas essayé moi-même, donc je ne suis pas sûr qu'il fonctionne) peut être de créer une instance de UITableViewController dans storyboard avec des cellules statiques. Ajoutez une instance de UIView à votre viewController, puis chargez de manière programmatique le tableView du UITableViewController dans le UIView de votre viewController.

5voto

kentoh Points 1947

La réponse de pmd fonctionne, mais dans le cas où la rétrocompatibilité avec iOS 5 est également requise, vous pouvez effectuer l'intégration par programme en utilisant l'API View Containment.

Dans la méthode viewDidLoad de votre UIViewController parent :

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
    MyTableViewController* vc =[storyboard instantiateViewControllerWithIdentifier:@"MyTableVC"];
    [self addChildViewController:vc];
    [self.view addSubview:vc.view];

    // ensure embedded view is aligned to top
    CGRect frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
    vc.view.frame = frame;

    [vc didMoveToParentViewController:self]; 
}

N'oubliez pas de spécifier un ID de storyboard pour votre UITableViewController avec les cellules statiques.

3voto

Patrick Points 1531

Je sais qu'il s'agit d'une vieille question, mais j'ai une solution toute faite pour résoudre ce problème.

J'avais besoin de 3 cellules statiques sur un UIViewController et c'est ce que j'ai fait :

  1. Faites glisser quelques cellules de la vue tableau dans votre interface (pas dans UITableView) - ajoutez du texte et tout ce dont vous avez besoin.
  2. Créez des propriétés IBOutlet pour vos cellules et synthétisez-les.
  3. Faites glisser un bouton et faites en sorte qu'il couvre la totalité de la cellule. Donnez au bouton le type "Personnalisé" pour qu'il soit invisible - répétez l'opération pour toutes les cellules.
  4. Ajoutez des balises numériques à vos boutons
  5. Implémentez les fonctions suivantes. buttonDown est connecté à l'événement 'Touch Down' des boutons. buttonUp est connecté à l'événement 'Touch Up Inside'. ET Retouches à l'extérieur

    -(IBAction)buttonDown:(id)sender {
        if ([sender tag] ==  1) {
            myFirstCell.selected = YES;
        }
        else if ([sender tag] ==  2) {
            mySecondCell.selected = YES;
        }
        else if ([sender tag] ==  3) {
            myThirdCell.selected = YES;
        }
    }
    
    -(IBAction)buttonUp:(id)sender {
        myFirstCell.selected = NO;
        mySecondCell.selected = NO;
        myThirdCell.selected = NO;
    }

Vous pouvez faire tout ce que vous voulez dans l'événement buttonDown et utiliser le bouton pour accéder directement à une nouvelle vue. Je trouve cela très utile.

-2voto

aqs Points 1054

Je ne suis pas sûr de ce que vous entendez par cellules statiques, mais si vous essayez de construire les cellules dans IB, et que vous voulez ensuite les utiliser dans votre tableView, ce que vous pourriez faire est dans votre cellForRowAtIndex vous pouvez appeler loadNibNamed en passant comme paramètre le nom du fichier .nib que vous avez créé pour les cellules. Assurez-vous que vous avez un fichier outlet dans votre viewController qui correspond au .nib de la cellule. Essayez d'explorer les directions suivantes si c'est ce que vous essayez d'obtenir

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X