Próbuję dodać UIPopoverView do mojej aplikacji Swift iOS 8, ale nie mogę uzyskać dostępu do właściwości PopoverContentSize, ponieważ okienko popover nie jest wyświetlane we właściwym kształcie. mój kod:
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)
}
wynik:
Kiedy robię to samo za pomocą UIPopoverPresentationController, nadal nie mogę tego zrobić. to jest mój kod:
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)
}
Otrzymuję dokładnie ten sam wynik.
Jak dostosować rozmiar mojego popovera? Każda pomoc byłaby bardzo mile widziana!
Odpowiedzi:
Okej, współlokator przyjrzał się temu i zorientował się:
To jest sposób.
Nie rozmawiasz już z samym wyskakującym okienkiem, rozmawiasz z kontrolerem widoku znajdującym się w nim, aby ustawić rozmiar zawartości, wywołując właściwość
preferredContentSize
źródło
W rzeczywistości jest to znacznie prostsze. W scenorysie powinieneś utworzyć kontroler widoku, którego chcesz użyć jako popover i jak zwykle utworzyć dla niego klasę viewcontroller. Zrób przejście, jak pokazano poniżej, od obiektu, który chcesz otworzyć, w tym przypadku o
UIBarButton
nazwie „Konfiguracja”.W „mother viewcontroller” zaimplementuj
UIPopoverPresentationControllerDelegate
metodę i delegate:Zastąp
prepareForSeque
metodę w następujący sposób:I jesteś skończony. Możesz teraz traktować widok popover jak każdy inny widok, tj. dodaj pola, a co nie! Kontroler zawartości uzyskujesz za pomocą
popoverPresentationController.presentedViewController
metody wUIPopoverPresentationController
.Również na iPhonie musiałbyś nadpisać
źródło
Znalazłem kompletny przykład, jak to wszystko działało, aby zawsze można było wyświetlić popover bez względu na urządzenie / orientację https://github.com/frogcjn/AdaptivePopover_iOS8_Swift .
Kluczem jest zaimplementowanie UIAdaptivePresentationControllerDelegate
Następnie rozwiń powyższy przykład (z Imagine Digital):
źródło
UIModalPresentationFullScreen
alboUIModalPresentationOverFullScreen
”. Ponadto „Jeśli nie zaimplementujesz tej metody lub nie zwrócisz stylu innego niżUIModalPresentationFullScreen
lubUIModalPresentationOverFullScreen
, kontroler prezentacji dostosuje styl prezentacji doUIModalPresentationFullScreen
stylu”.Swift 2.0
Cóż, wypracowałem. Spójrz. Utworzono ViewController w StoryBoard. Skojarzone z klasą PopOverViewController.
Zobacz ViewController:
Uwaga: metodę func showPopover (base: UIView) należy umieścić przed ViewDidLoad. Mam nadzieję, że to pomoże !
źródło
showPopover(base: UIView)
metodę należy umieścić wcześniejviewDidLoad()
?W iOS9 UIPopoverController jest amortyzowany. Więc można użyć poniższego kodu dla wersji Objective-C powyżej iOS9.x,
źródło
Tutaj konwertuję kod Swift „Joris416” na Objective-c,
Pamiętaj, aby dodać
UIPopoverPresentationControllerDelegate, UIAdaptivePresentationControllerDelegate
źródło
Najlepiej wyjaśnić to na blogu iOS8 dzień po dniu
Krótko mówiąc, po ustawieniu modalPresentationStyle UIViewControllera na .Popover można uzyskać UIPopoverPresentationClass (nową klasę iOS8) za pośrednictwem właściwości popoverPresentationController kontrolera.
źródło
Stworzyłem szybką odpowiedź Imagine Digitals w wersji Objective-C powyżej. Nie sądzę, żebym niczego przegapił, ponieważ wydaje się, że działa podczas wstępnych testów, jeśli coś zauważysz, daj mi znać, a zaktualizuję to
źródło
popover.sourceView = self.view;
moje dwa centy za xcode 9.1 / swift 4.
i eksperymentuj w:
func adaptivePresentationStyle ...
lub: return .pageSheet .... i tak dalej ..
źródło
Zaimplementuj UIAdaptivePresentationControllerDelegate w swoim Viewcontroller. Następnie dodaj :
źródło
Poniżej znajduje się dość obszerny przewodnik dotyczący konfigurowania i prezentowania okien popover. https://www.appcoda.com/presentation-controllers-tutorial/
Podsumowując, realna implementacja (z pewnymi aktualizacjami oryginalnej składni artykułu dla Swift 4.2 ), którą można następnie wywołać z innego miejsca, wyglądałaby następująco:
Wiele z tego zostało już omówionych w odpowiedzi z @mmc, ale artykuł pomaga wyjaśnić niektóre z tych użytych elementów kodu, a także pokazuje, jak można go rozszerzyć.
Zawiera również wiele dodatkowych szczegółów na temat używania delegowania do obsługi stylu prezentacji na iPhonie i iPadzie oraz umożliwia odrzucenie popover, jeśli kiedykolwiek zostanie wyświetlony na pełnym ekranie. Ponownie zaktualizowany dla Swift 4.2 :
Mam nadzieję że to pomoże.
źródło
Dla tych, którzy chcą się uczyć!
Stworzyłem projekt Open Source dla tych, którzy chcą się uczyć i używać widoku Popover do dowolnego celu. Projekt można znaleźć tutaj. https://github.com/tryWabbit/KTListPopup
źródło