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
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