hat Apple die offizielle Art und Weise zu präsentieren und konfigurieren popovers für iOS8 hier verwendet werden: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIPopoverPresentationController_class/index.html
Während ähnlich wie @ MidhunMP Antwort, es ist erwähnenswert, den Absatz:
die popover Präsentation Controller konfiguriert nach dem Aufruf presentViewController:animated:completion:
könnte sehen m counter-intuitive, aber UIKit erstellt keinen Präsentationscontroller bis Sie eine Präsentation initiieren. Außerdem muss UIKit bis zum nächsten Aktualisierungszyklus auf warten, damit auf dem Bildschirm trotzdem neuer Inhalt angezeigt wird. Diese Verzögerung gibt Ihnen Zeit, den Präsentationscontroller für Ihr Popover zu konfigurieren.
Die Konfiguration und Reaktion auf Ereignisse kann auch über einen Delegaten erfolgen, wenn Sie möchten (https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIPopoverPresentationControllerDelegate_protocol/index.html).
Ein Beispiel, abgesehen von der Verwendung des Delegierten:
// Present the controller using the popover style.
controller.modalPresentationStyle = UIModalPresentationPopover;
[self presentViewController:controller animated:YES completion:nil];
// Popover presentation controller was created when presenting; now configure it.
UIPopoverPresentationController *presentationController =
[controller popoverPresentationController];
presentationController.permittedArrowDirections = UIPopoverArrowDirectionLeft;
presentationController.sourceView = containerFrameOfReferenceView;
// arrow points out of the rect specified here
presentationController.sourceRect = childOfContainerView.frame;
Aber Sie wollen auch diese schließen. Um dies zu tun, ohne einen Delegaten zu verwenden, können Sie Ihre Präsentation Controller rufen Sie einfach an:
[self dismissViewControllerAnimated:YES completion:nil];
Aber was, wenn ich das Gerät drehen, und die popover verweist nicht auf den rechten Bereich? Ihr präsentierender Controller kann damit umgehen:
// Respond to rotations or split screen changes
- (void)viewWillTransitionToSize:(CGSize)size
withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
[coordinator animateAlongsideTransition:nil
completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
// Fix up popover placement if necessary, after the transition.
if (self.presentedViewController) {
UIPopoverPresentationController *presentationController =
[self.presentedViewController popoverPresentationController];
presentationController.sourceView = containerFrameOfReferenceView;
presentationController.sourceRect = childOfContainerView.frame;
}
}];
}
Wenn ich weiß, wie man eine Warnung entfernt, dann habe ich nicht gefragt, die Frage zu stellen. und Sie haben kommentiert, wenn Sie auch nicht wissen, wie Sie die Warnung entfernen können? –
Die Verwarnungswarnung in UIStorybaordPopoverSegue.h wurde verbessert und bietet nun die Anweisung: "Access destinationViewController.popoverPresentationController aus dem performHandler Ihres Segments ..." – Mark