Czy jest możliwe przeniesienie kontrolera UIPopover na ekranie po jego wcześniejszym wyświetleniu?
Mam niewielki widok w mojej aplikacji, który może się nieco poruszyć i chciałbym, aby kontroler UIPopoverController poruszał się z nim bez konieczności ponownego prezentowania kontrolera UIPopoverController za każdym razem, gdy się porusza. czy to możliwe?Czy kontroler UIPopoverController może być przesuwany po ekranie?
Odpowiedz
Począwszy od wersji iOS 9, "UIPopoverController jest przestarzałe.Poprawy są teraz zaimplementowane jako prezentacje UIViewController.Użyj modalnego stylu prezentacji UIModalPresentationPopover i UIPopoverPresentationController."
Użyj poniższego opisu, aby wyświetlić popover. Możesz zmienić wartości sourceRect i sourceView, ale nie jest to zamierzone zachowanie API.
DetailViewController *detailVC = self.detailViewController;
detailVC.preferredContentSize = CGSizeMake(420, 92);
detailVC.modalPresentationStyle = UIModalPresentationPopover;
UIPopoverPresentationController *presController = detailVC.popoverPresentationController;
if (presController) {
presController.delegate = detailVC;
presController.barButtonItem = self.detailButton;
presController.sourceRect = self.view.frame;
presController.sourceView = self.view;
presController.permittedArrowDirections = UIPopoverArrowDirectionAny;
}
[self presentViewController: detailVC animated:YES completion:^{
}];
Zamiast tego proponuję zachować odniesienie do kontrolera widoku prezentowanego z okienkiem, odrzucić popover i ponownie przedstawić.
DetailViewController *detailVC = self.detailViewController;
[self dismissViewControllerAnimated:NO completion:^{
UIPopoverPresentationController *presController = detailVC.popoverPresentationController;
if (presController) {
presController.delegate = detailVC;
presController.barButtonItem = self.detailButton;
presController.sourceRect = self.view.frame; //Update frame
presController.sourceView = self.view;
presController.permittedArrowDirections = UIPopoverArrowDirectionAny;
}
[self presentViewController: detailVC animated:NO completion:^{
}];
}];
Wciąż przegłaszam głosowanie za to. Jeśli chcesz zagłosować na tę zaakceptowaną odpowiedź, bądź pomocny i zostaw komentarz. –
"Stwórz własne" nie jest odpowiedzią, której szukałbym – Loukas
@Loukas Mam nadzieję, że spodoba ci się nowa odpowiedź lepiej. Jeśli funkcja UIPopoverPresentationController nie zapewni wymaganej funkcjonalności, konieczne będzie ponowne utworzenie kontrolera UIPopoverController, ponieważ interfejs API nie jest zbyt elastyczny. –
Nie, nie możesz. To nie jest metoda, aby to zrobić.
pover presentPopoverFromRect:
wspomniano w komentarzach, ale zauważam
obecny
nie może reprezentować bez odświeżanie.
Pease zobacz Paper by Fifty na iPadzie. Mają popover, który zawiera pole tekstowe. Popover animowany nad klawiaturą i kiedy klawiatura zostanie odrzucona, animacja powraca do pierwotnej pozycji. Czy zakończyło się kompilacja lub deweloper? – Daniel
Gdy pojawia się klawiatura, domyślnie SDK przesuwa popust wyżej, aby pomieścić klawiaturę. Gdy klawiatura zostanie odrzucona, popover zostanie przywrócony do pierwotnej lokalizacji. To wszystko jest wbudowane w zachowanie. – Andrew
Tak, to prawda. Zapomniałem, o co mi chodziło z moim komentarzem, było zbyt dawno temu. – Daniel
Możesz śledzić użytkowników dotyka ekranu i użyć presentPopoverFromRect:
, aby ponownie wyświetlić popover.
Warto spróbować, ale wyobrażam sobie, że może to być trochę drogie, aby to zrobić w ten sposób. Jestem pewien, że kiedy go odrzucisz i zmienisz, będzie dużo alokacji zasobów, które mogą być dość podatne na system. –
To prawda, ale to jest dobre zarządzanie pamięcią. Szczególnie w przypadku iPada masz trochę więcej pamięci do zabawy. – WrightsCS
Możesz ponownie wywołać presentPopoverFromRect.
Zobacz http://developer.apple.com/library/ios/#qa/qa1694/_index.html
- 1. UISearchBar z wynikami kontroli UIPopoverController nie może być przedmiotem interakcji z, gdy UIPopoverController jest na ekranie
- 2. UIPopovercontroller Parent?
- 3. Czy JavaScript może być bootowany?
- 4. Czy kontroler może wpływać na plik _layout.cshtml?
- 5. Czy wybór Enter() może być ponownie użyty po dodaniu/wstawieniu?
- 6. Czy kontroler AngularJS może być dziedziczony z innego kontrolera w tym samym module?
- 7. Czy powinien być jeden kontroler na widok w Angularjs?
- 8. Czy wydajność syslog może być poprawiona?
- 9. Czy jEdit może być używany jako IDE?
- 10. Czy ładowanie eksportowanych symboli może być opóźnione?
- 11. sprawdzić aktualny widok kontroler na ekranie w iOS
- 12. Wiosna REST kontroler po prośba
- 13. Czy ta próbka skrótu może być krótsza?
- 14. Czy REST w praktyce może być bezpaństwowcem?
- 15. Odrzucanie kontrolera UIPopoverController z poziomu jego treściViewController?
- 16. Czy aplikacja Backbone.js może być stopniowo ulepszana i może być indeksowana przez wyszukiwarki?
- 17. Czy ikona Google +1 może być dostosowywana?
- 18. Czy javascript może być wbudowany w WebPacka?
- 19. Czy std :: function może być serializowane?
- 20. Czy wektor :: shrink_to_fit może być ponownie przydzielony?
- 21. Czy td może być wewnątrz td
- 22. Czy EntryElement może być wieloliniowy w MonoTouch.Dialog?
- 23. Czy python @ classmethod może być dziedziczony?
- 24. Czy metoda w klasie może być generatorem?
- 25. Czy operator obsady może być jawny?
- 26. Czy sqlite może być również bazą danych?
- 27. Czy to może być rekurencyjne w Prologu?
- 28. Czy wydajność C++/CLI może być wyższa?
- 29. Czy zakres może być dopasowany w Scali?
- 30. Czy $ _SERVER ['SERVER_NAME'] może być podrobiony/sfałszowany?
nie jest '[popover presentPopoverFromRect:]' pracuje dla Ciebie? –
Pytanie brzmi, czy może przesunąć popOver po jego wyświetleniu. – Sid
Nie sądzę, że pozycja może być bezpośrednio zmieniona. Jeśli jednak wywołasz na nim presentPopoverFromRect bez odrzucania go, powinien "przenieść". – Anna