96 votes

Affichages personnalisés avec la table de montage séquentiel

Dans un complexe écrans (Vue Contrôleurs), j'ai utilisé pour séparer le tout en petits morceaux (je les appelle les widgets). Ces widgets sont constitués essentiellement d'un MyWidget.h et MyWidget.m le fichier ainsi qu'un MyWidget.xib le fichier, où l'élément racine est un UIView et le MyWidget classe est le Propriétaire du Fichier de la UIView. Dans l'init de ce widget je fais un loadNibNamed.

De mon point de Vue Contrôleur je puis faire un [[MyWidget alloc] init], à laquelle je rajoute à la Vue du Contrôleur de la vue principale en tant que sous la vue. Cela, à ce jour, fonctionne parfaitement.

Je vais maintenant me demandais, comment faire la même chose avec storyboard, parce que je ne peut pas vraiment commencer à glisser dans un UIView quelque part, j'ai toujours de commencer avec un UIViewController, ce qui je ne veux pas.

Si il n'est pas possible de faire ça avec un story-board, puis-je simplement le faire à l'ancienne, à l'aide de la table de montage séquentiel pour mes écrans principaux et les enchaîne, et utiliser un autre .xib fichier pour définir des vues personnalisées?

188voto

nioq Points 2272

Mettre le widget/afficher dans un document distinct .xib fichier fonctionne, et est approprié, surtout si vous voulez faire référence à cette même point de vue à partir de plusieurs Contrôleurs de Vue.

Cependant, parfois, vous ne voulez pas voir la vue supplémentaire/widget dans le même scénario, et il est possible. Voici comment faire:

  1. Sélectionnez votre point de vue contrôleur au bureau de l'IB (cliquez sur la barre noire au-dessous de la vue), puis faites glisser une UIView à partir de la Bibliothèque d'Objet dans la barre noire:

    enter image description here

  2. Lorsqu'une vue est dans la barre noire, il est instancié comme n'importe quel autre point de vue de l'IB, mais n'est tout simplement pas ajouté à votre point de vue de la hiérarchie jusqu'à ce que vous le faites dans le code. Modifier l'affichage de la classe pour correspondre à votre propre sous-classe si nécessaire:

    enter image description here

  3. Vous pouvez le raccorder à votre vue-contrôleur comme vous le feriez pour brancher tout autre point de vue: enter image description here

  4. L'ajout de la visualisation s'affiche dans votre structure du Document et vous pouvez raccorder des actions et des références là aussi:

    enter image description here


Maintenant, le problème qui demeure est que vous ne pouvez pas voir la vue peu importe combien de fois vous essayez de cliquer ou double cliquer, ce qui irait à l'encontre de l'objectif même de mettre dans le même scénario. Heureusement, il y a deux solutions que je connais.

La première solution consiste à faire glisser la vue à partir de la barre noire en arrière dans votre point de vue du contrôleur de la vue, de l'éditer, puis faites-le glisser de nouveau dans la barre noire une fois que vous avez terminé. C'est gênant, mais fiable.

L'autre solution est plus pointilleux, mais je le préfère parce qu'il me permet de voir tous mes points de vue en même temps:

  1. Faites glisser un UITableView à partir de la Bibliothèque d'Objets dans votre vue nouvellement ajoutée.
  2. Ensuite, faites glisser un UITableViewCell dans la UITableView.

    enter image description here

  3. Une fois que vous avez votre point de vue qui apparaît comme par magie sur le côté, mais vous avez une UITableView que vous ne souhaitez pas. Vous pouvez redimensionner que 0x0, ou vous pouvez les supprimer et votre UIView sera (normalement) toujours rester visible.

  4. De temps en temps le secondaire vue deviendra à nouveau masqué de l'IB. Vous pouvez répéter les étapes ci-dessus si vous avez supprimé la UITableView, ou si la UITableView est encore dans la hiérarchie, vous avez juste besoin de cliquer sur le UITableViewCell et la vue s'affiche de nouveau.

La deuxième méthode fonctionne pour UIViews mais pas pour UIToolbars et il est impossible pour UIButtons, de sorte que la solution la plus propre que j'ai trouvé lorsque vous avez besoin de comprendre beaucoup de différents sous-vues est de fixer un seul secondaire UIView à votre vue-contrôleur comme un conteneur qui n'est jamais montré, mettez tous vos vues secondaires, et l'utilisation de la UITableViewCell truc pour faire tout ce qui est visible. Je redimensionner mon mannequin UITableView à 0x0 pour le rendre invisible. Voici une capture d'écran de la façon dont il semble tout à fait comme ensemble:

enter image description here

11voto

tipycalFlow Points 4311

Si vous êtes simplement à la recherche pour faire de votre point de vue contrôleurs ailleurs(et pas dans votre story-board), puis il y a une manière assez simple pour cela:

1) Créer votre CustomViewControllers(abcdController dans le code que j'ai essayé) avec leur xibs comme d'habitude.

2) Ajouter un UIViewController(ou de ce qu'était la super-classe de votre CustomViewController) pour le story-board.

3) Définir les CustomClass d' CustomViewController au lieu de UIViewController comme indiqué ici:

enter image description here

4) Enfin, dans votre viewDidLoad, la charge de la coutume xib et vous avez terminé.

- (void)viewDidLoad
{
    [super viewDidLoad];
    [[NSBundle mainBundle] loadNibNamed:@"abcdController" owner:self options:nil];
    // Do any additional setup after loading the view from its nib.
}

3voto

Joe Blow Points 3618

Je ne suis pas sûr si cela l'assurance qualité est un peu en dehors de la date,

mais ce que vous décrivez est

conteneur vues

sur storyboard - qui Apple a enfin ajouté à résoudre complètement la situation que vous décrivez.

Il est désormais banal.

Il y a des tutos partout, voici un long essai sur elle .. http://stackoverflow.com/a/23403979/294884

Vous pouvez faire absolument tout ce que vous voulez avec une vue entièrement sur le storyboard et ensuite l'utiliser n'importe où.

Pour exemple voici une ridiculement compliqué vue, ou devrions-nous dire maintenant de la "scène" .. "BasicInfoEdit". (d'ailleurs c'est tellement complexe, il a son propre "sous-plan")

enter image description here

Je peux maintenant utiliser "BasicInfoEdit" n'importe où, à tous, trivialement à l'aide d'un conteneur de vue.

La magie redimensionne - tout. (Il suffit de faire le conteneur de vue quelle que soit la taille, la forme, la position, peut-être la couleur de fond, etc vous voulez - pas de problème.)

(Notez que, complètement bêtement - Apple fait toujours des trucs comme ça! - lorsque vous cliquez sur ajouter un conteneur en vue d'une scène, d'Apple pour aucune raison vous donne un "défaut" UIViewController apposée sur le conteneur de vue. C'est complètement stupide, parce que l'ensemble du tout le point de conteneur point de vue, est que vous pouvez les faire votre propre génial personnalisé scène-tout comme l'OP demande. Ainsi, lorsque vous ajoutez un conatainer vue d'une scène: bien sûr, il suffit de cliquer pour supprimer complètement inutile "par défaut UIViewController" qu'Apple s'y attache. Simplement glisser à partir du conteneur de vue, à votre personnalisé de la scène, et vous avez terminé!)

(Ceci est expliqué en long, en photos ici .. http://stackoverflow.com/a/23403979/294884 )

Espérons que cela aide!

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