Ich versuche, meiner Swift iOS 8-App eine UIPopoverView hinzuzufügen, kann jedoch nicht auf die PopoverContentSize-Eigenschaft zugreifen, da das Popover nicht in der richtigen Form angezeigt wird. Mein 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)
}
Ausgabe:
Wenn ich dasselbe über UIPopoverPresentationController mache, bekomme ich es immer noch nicht fertig. Das ist mein 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)
}
Ich bekomme genau die gleiche Ausgabe.
Wie passe ich die Größe meines Popovers an? Jede Hilfe wäre sehr dankbar!
Antworten:
Okay, ein Mitbewohner hat es sich angesehen und herausgefunden:
Das ist der Weg.
Sie sprechen nicht mehr mit dem Popover selbst, sondern mit dem darin enthaltenen Ansichts-Controller, um die Inhaltsgröße festzulegen, indem Sie die Eigenschaft aufrufen
preferredContentSize
quelle
Eigentlich ist es viel einfacher als das. Im Storyboard sollten Sie den Viewcontroller, den Sie als Popover verwenden möchten, erstellen und wie gewohnt eine Viewcontroller-Klasse dafür erstellen. Machen Sie einen Übergang wie unten gezeigt von dem Objekt, das Sie das Popover öffnen möchten, in diesem Fall den
UIBarButton
Namen "Config".Implementieren Sie im "Mother Viewcontroller" die
UIPopoverPresentationControllerDelegate
und die Delegate-Methode:Überschreiben Sie die
prepareForSeque
Methode wie folgt :Und du bist fertig. Und Sie können die Popover-Ansicht jetzt wie jede andere Ansicht behandeln, z. Felder hinzufügen und was nicht! Und Sie erhalten den Content-Controller mithilfe der
popoverPresentationController.presentedViewController
Methode in derUIPopoverPresentationController
.Auch auf einem iPhone müsste man überschreiben
quelle
Ich habe ein vollständiges Beispiel gefunden, wie dies alles funktioniert, damit Sie unabhängig von Gerät / Ausrichtung immer ein Popover anzeigen können . Https://github.com/frogcjn/AdaptivePopover_iOS8_Swift .
Der Schlüssel ist die Implementierung von UIAdaptivePresentationControllerDelegate
Erweitern Sie dann das obige Beispiel (von Imagine Digital):
quelle
UIModalPresentationFullScreen
oderUIModalPresentationOverFullScreen
" zurückgeben muss. "Wenn Sie diese Methode nicht implementieren oder einen anderen Stil alsUIModalPresentationFullScreen
oder zurückgebenUIModalPresentationOverFullScreen
, passt der Präsentationscontroller den Präsentationsstil an denUIModalPresentationFullScreen
Stil an."Swift 2.0
Nun, ich habe es geschafft. Guck mal. In StoryBoard einen ViewController erstellt. Verbunden mit der PopOverViewController-Klasse.
Siehe ViewController:
Hinweis: Die func showPopover-Methode (Basis: UIView) sollte vor ViewDidLoad platziert werden. Ich hoffe es hilft !
quelle
showPopover(base: UIView)
Methode vorher platziert werdenviewDidLoad()
?In iOS9 wird UIPopoverController abgeschrieben. Verwenden Sie also den folgenden Code für die Objective-C-Version über iOS9.x.
quelle
Hier konvertiere ich "Joris416" Swift Code in Objective-c,
Denken Sie daran, hinzuzufügen
UIPopoverPresentationControllerDelegate, UIAdaptivePresentationControllerDelegate
quelle
Dies wird am besten im täglichen iOS8-Blog erklärt
Kurz gesagt, sobald Sie den modalPresentationStyle Ihres UIViewController auf .Popover festgelegt haben, können Sie über die Eigenschaft popoverPresentationController des Controllers eine UIPopoverPresentationClass (eine neue iOS8-Klasse) abrufen.
quelle
Ich habe oben eine Objective-C-Version von Imagine Digitals schnell beantwortet. Ich glaube nicht, dass ich etwas verpasst habe, da es unter vorläufigen Tests zu funktionieren scheint. Wenn Sie etwas entdecken, lassen Sie es mich wissen und ich werde es aktualisieren
quelle
popover.sourceView = self.view;
meine zwei Cent für Xcode 9.1 / Swift 4.
und experimentieren in:
func adaptivePresentationStyle ...
oder: return .pageSheet .... und so weiter ..
quelle
Implementieren Sie UIAdaptivePresentationControllerDelegate in Ihrem Viewcontroller. Dann füge hinzu :
quelle
Im Folgenden finden Sie eine ziemlich umfassende Anleitung zum Konfigurieren und Präsentieren von Popovers. https://www.appcoda.com/presentation-controllers-tutorial/
Zusammenfassend wäre eine praktikable Implementierung (mit einigen Aktualisierungen der ursprünglichen Artikelsyntax für Swift 4.2 ), die dann von einer anderen Stelle aufgerufen werden könnte, wie folgt:
Vieles davon wurde bereits in der Antwort von @mmc behandelt, aber der Artikel hilft dabei, einige der verwendeten Codeelemente zu erläutern und zu zeigen, wie sie erweitert werden können.
Es enthält außerdem viele zusätzliche Details zur Verwendung der Delegierung, um den Präsentationsstil für iPhone und iPad zu verwalten und das Popover zu schließen, falls es jemals im Vollbildmodus angezeigt wird. Wieder aktualisiert für Swift 4.2 :
Hoffe das hilft.
quelle
Für diejenigen, die studieren wollen!
Ich habe ein Open Source-Projekt für diejenigen erstellt, die die Popover-Ansicht für jeden Zweck studieren und verwenden möchten. Das Projekt finden Sie hier. https://github.com/tryWabbit/KTListPopup
quelle