web-dev-qa-db-fra.com

Comment créer des Popovers avec Xcode Storyboards

Comment créer un popover dans un Storyboard iPad pour une application iOS 5.0+?

Il existe déjà une configuration avec le modèle de projet Xcode (application utilitaire), mais je n'arrive pas à comprendre comment Apple l'a fait fonctionner. J'ai essayé de l'imiter, mais je n'ai eu que des erreurs. J'ai même regardé sur le site de développement d'Apple, mais je n'ai obtenu que du code obsolète qui entraînait des avertissements et des erreurs de construction.

J'ai une CBMainView et une CBMasterView (à l'exception de la vue principale déjà incluse), et une UIToolbar avec une UIToolbarButton. J'ai besoin de l'utilisateur pour appuyer sur le bouton sur la UIToolbar, et en haut vient mon 320x300 Popover (CBMasterView).

Comment puis-je faire cela avec Xcode Storyboards? Des tutoriels, des réponses, du code ou des liens sont tous appréciés!

15
Samuel Spencer

Avant iOS 5, il aurait fallu afficher un autre UIViewControlleren utilisant le premier répondant via une présentation modale (et une pile de code).

Pour créer un popover en mode Storyboard de Xcode (iOS 5+), utilisez UIButtonou UIToolbarButtonet créez un scénario de storyboard entre le bouton et le UIViewControllerque vous voulez passer au dessus.

Créer une transition entre un bouton et un autre UIViewControllerest simple. Voici comment:

  1. Cliquez sur le bouton dans votre story-board et Control+Drag du bouton au UIViewControllerde votre choix. Vous devriez voir apparaître une ligne bleu clair qui va du bouton à la pointe de la souris.
  2. Après avoir fait glisser la ligne bleue vers le ViewController choisi, un petit menu noir apparaîtra. Ce menu affiche les différentes options de classement. Sélectionnez Popovername__.

    Popover Segue Menu

  3. Si tout a été fait correctement, cette séquence devrait être visible dans l'inspecteur de connexions lorsque le bouton est sélectionné:

Use Popover instead of Modal or Push

La UIViewControllerque vous créez doit également avoir une taille personnalisée plus petite que celle du plein écran. Vous pouvez définir une taille personnalisée en sélectionnant le contrôleur de vue et en définissant sa propriété size sur freeformou master(320 x 850).

31
Samuel Spencer

Je cherche aussi la réponse à ce problème. Je l'ai résolu en utilisant NSNotification.

Voici comment:

Le contrôleur de vue qui affiche la fenêtre contextuelle doit s’inscrire pour recevoir la notification:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(languageSetup) name:SPVWChangeLanguage object:nil];

languageSetup est la fonction qui sera appelée, SPVWChangeLanguage est une chaîne que vous définissez dans votre contrôleur de vue contextuel.

J'ai ajouté cette ligne dans viewDidAppear

Maintenant, dans votre contrôleur de vue popup, ajoutez cette ligne lorsque l'utilisateur sélectionne quelque chose dans le tableau:

[[NSNotificationCenter defaultCenter] postNotification: [NSNotification notificationWithName: SPVWChangeLanguage object:self]];

avant de rejeter le popup:

[self.popOverController dismissPopoverAnimated:YES];

C'est tout. Le sélecteur languageSetup (dans mon cas) sera appelé. Assurez-vous de supprimer la notification lorsque votre contrôleur de vue s'en va:

[[NSNotificationCenter defaultCenter] removeObserver:self];

Je le fais dans viewWillDisappear

Je pense qu'il doit y avoir un moyen plus facile. Mais au moins, celui-ci fonctionne pour moi.

0
alvira

Si vous utilisez le story-board avec IOS8, jetez un coup d'œil à ce message, répondez-le pour moi!

Comment présenter un modal au sommet de la vue actuelle dans Swift

En bref: vous créez une vue contextuelle distincte, attribuez une couleur avec une opacité faible (ou nulle) à l'arrière-plan et vous vous connectez à partir de votre vue principale à la vue contextuelle, avec une séquence modale.

Ensuite, dans le storyboard, cliquez sur la séquence, puis dans l'inspecteur d'attributs: changez la présentation en "contexte actuel" (et peut-être un passage en mode de dissolution croisée, si vous utilisez une opacité supérieure à 0)

Le moyen le plus simple que j'ai vu jusqu'à présent!

0
AnitaD