2011-05-06 5 views
5

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?

+0

nie jest '[popover presentPopoverFromRect:]' pracuje dla Ciebie? –

+0

Pytanie brzmi, czy może przesunąć popOver po jego wyświetleniu. – Sid

+0

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

Odpowiedz

1

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:^{ 

    }]; 
}]; 
+0

Wciąż przegłaszam głosowanie za to. Jeśli chcesz zagłosować na tę zaakceptowaną odpowiedź, bądź pomocny i zostaw komentarz. –

+0

"Stwórz własne" nie jest odpowiedzią, której szukałbym – Loukas

+0

@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. –

0

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.

+0

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

+0

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

+0

Tak, to prawda. Zapomniałem, o co mi chodziło z moim komentarzem, było zbyt dawno temu. – Daniel

0

Możesz śledzić użytkowników dotyka ekranu i użyć presentPopoverFromRect:, aby ponownie wyświetlić popover.

+0

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

+0

To prawda, ale to jest dobre zarządzanie pamięcią. Szczególnie w przypadku iPada masz trochę więcej pamięci do zabawy. – WrightsCS

Powiązane problemy