J'essaie d'ajouter un UIPopoverView à mon application Swift iOS 8, mais je ne parviens pas à accéder à la propriété PopoverContentSize, car le popover ne s'affiche pas dans la forme correcte. mon code:
var popover: UIPopoverController? = nil
func addCategory() {
var newCategory = storyboard.instantiateViewControllerWithIdentifier("NewCategory") as UIViewController
var nav = UINavigationController(rootViewController: newCategory)
popover = UIPopoverController(contentViewController: nav)
popover!.setPopoverContentSize(CGSizeMake(550, 600), animated: true)
popover!.delegate = self
popover!.presentPopoverFromBarButtonItem(self.navigationItem.rightBarButtonItem, permittedArrowDirections: UIPopoverArrowDirection.Any, animated: true)
}
production:
Quand je fais la même chose via UIPopoverPresentationController, je ne le fais toujours pas. c'est mon code:
func addCategory() {
var popoverContent = self.storyboard.instantiateViewControllerWithIdentifier("NewCategory") as UIViewController
var nav = UINavigationController(rootViewController: popoverContent)
nav.modalPresentationStyle = UIModalPresentationStyle.Popover
var popover = nav.popoverPresentationController as UIPopoverPresentationController
popover.delegate = self
popover.popoverContentSize = CGSizeMake(1000, 300)
popover.sourceView = self.view
popover.sourceRect = CGRectMake(100,100,0,0)
self.presentViewController(nav, animated: true, completion: nil)
}
J'obtiens exactement le même résultat.
Comment personnaliser la taille de mon popover? Toute aide serait très appréciée!
Réponses:
D'accord, un colocataire y a jeté un coup d'œil et l'a compris:
C'est comme ça.
Vous ne parlez plus au popover lui-même, vous parlez au contrôleur de vue à l'intérieur pour définir la taille du contenu, en appelant la propriété
preferredContentSize
la source
En fait, c'est beaucoup plus simple que cela. Dans le storyboard, vous devez créer le viewcontroller que vous souhaitez utiliser comme popover et créer une classe viewcontroller pour lui comme d'habitude. Faites une séquence comme indiqué ci-dessous à partir de l'objet que vous souhaitez ouvrir le popover, dans ce cas le
UIBarButton
nommé "Config".Dans le "contrôleur de vue mère", implémentez la
UIPopoverPresentationControllerDelegate
méthode et la méthode déléguée:Remplacez la
prepareForSeque
méthode comme ceci:Et tu as fini. Et vous pouvez maintenant traiter la vue popover comme n'importe quelle autre vue, c'est-à-dire. ajouter des champs et que sais-je! Et vous obtenez le contrôleur de contenu en utilisant la
popoverPresentationController.presentedViewController
méthode duUIPopoverPresentationController
.Également sur un iPhone, vous devrez écraser
la source
J'ai trouvé un exemple complet de la façon dont tout cela fonctionne afin que vous puissiez toujours afficher un popover quel que soit le périphérique / l'orientation https://github.com/frogcjn/AdaptivePopover_iOS8_Swift .
La clé est d'implémenter UIAdaptivePresentationControllerDelegate
Puis prolongez l'exemple ci-dessus (d'Imagine Digital):
la source
UIModalPresentationFullScreen
ouUIModalPresentationOverFullScreen
". En outre, «Si vous n'implémentez pas cette méthode ou ne renvoyez aucun style autre queUIModalPresentationFullScreen
ouUIModalPresentationOverFullScreen
, le contrôleur de présentation ajuste le style de présentation auUIModalPresentationFullScreen
style».Swift 2.0
Eh bien, j'ai travaillé. Regarde. Création d'un ViewController dans StoryBoard. Associé à la classe PopOverViewController.
Voir ViewController:
Remarque: La méthode func showPopover (base: UIView) doit être placée avant ViewDidLoad. J'espère que ça aide !
la source
showPopover(base: UIView)
méthode devrait-elle être placée avantviewDidLoad()
?Dans iOS9, UIPopoverController est déprécié. Vous pouvez donc utiliser le code ci-dessous pour la version Objective-C ci-dessus iOS9.x,
la source
Ici, je convertis le code Swift "Joris416" en Objective-c,
N'oubliez pas d'ajouter
UIPopoverPresentationControllerDelegate, UIAdaptivePresentationControllerDelegate
la source
Ceci est mieux expliqué sur le blog quotidien iOS8
En bref, une fois que vous avez défini le modalPresentationStyle de votre UIViewController sur .Popover, vous pouvez obtenir une UIPopoverPresentationClass (une nouvelle classe iOS8) via la propriété popoverPresentationController du contrôleur.
la source
J'ai créé une version Objective-C de la réponse rapide Imagine Digitals ci-dessus. Je ne pense pas avoir manqué quoi que ce soit car il semble fonctionner sous les tests préliminaires, si vous repérez quelque chose, faites-le moi savoir, et je le mettrai à jour
la source
popover.sourceView = self.view;
mes deux cents pour xcode 9.1 / swift 4.
et expérimentez dans:
func adaptivePresentationStyle ...
ou: retournez .pageSheet .... et ainsi de suite ..
la source
Implémentez UIAdaptivePresentationControllerDelegate dans votre Viewcontroller. Puis ajouter :
la source
Ce qui suit contient un guide assez complet sur la configuration et la présentation des popovers. https://www.appcoda.com/presentation-controllers-tutorial/
En résumé, une implémentation viable (avec quelques mises à jour de la syntaxe de l'article d'origine pour Swift 4.2 ), qui sera ensuite appelée depuis ailleurs, serait quelque chose comme ceci:
Une grande partie de cela a déjà été abordée dans la réponse de @mmc, mais l'article aide à expliquer certains de ces éléments de code utilisés et montre également comment il pourrait être développé.
Il fournit également de nombreux détails supplémentaires sur l'utilisation de la délégation pour gérer le style de présentation pour iPhone par rapport à iPad, et pour permettre le rejet du popover s'il est déjà affiché en plein écran. Encore une fois, mis à jour pour Swift 4.2 :
J'espère que cela t'aides.
la source
Pour ceux qui veulent étudier!
J'ai créé un projet Open Source pour ceux qui veulent étudier et utiliser la vue Popover à des fins. Vous pouvez trouver le projet ici. https://github.com/tryWabbit/KTListPopup
la source