2016-03-28 18 views
2

Auf iPad UIPopoverPresentationController funktioniert gut, aber auf dem iPhone zeigt es immer volles Fenster Modal Popup. Ich verwende folgenden Code:UIPopoverPresentationController zeigt Vollbildmodal auf dem iPhone

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
MySecondViewController *contentVC = [storyboard instantiateViewControllerWithIdentifier:@"Pop"]; 
contentVC.modalPresentationStyle = UINavigationControllerOperationPop; // 13 
UIPopoverPresentationController *popPC = contentVC.popoverPresentationController; // 14 
contentVC.popoverPresentationController.sourceRect =CGRectMake(100, 130, 280, 230); 
self.navigationController.preferredContentSize = CGSizeMake(200, self.parentViewController.childViewControllers.lastObject.preferredContentSize.height-100); 
//self.showPop.frame; // 15 
contentVC.popoverPresentationController.sourceView = 
self.showPop; // 16 
popPC.permittedArrowDirections = UIPopoverArrowDirectionAny; // 17 
popPC.delegate = self; //18 
[self presentViewController:contentVC animated:YES completion:nil]; 

-(UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller { 
    return UIModalPresentationNone; 
} 
+0

http://stackoverflow.com/questions/28521583/uipopoverpresentationcontroller-on-iphone-doesnt-produce-popover – gabbler

Antwort

4

In ViewController.h Zuerst eine Eigenschaft von UIPopoverPresenatationController.

@property(nonatomic,retain)UIPopoverPresentationController *dateTimePopover8; 

Dann

UINavigationController *destNav = [[UINavigationController alloc] initWithRootViewController:dateVC];/*Here dateVC is controller you want to show in popover*/ 
      dateVC.preferredContentSize = CGSizeMake(280,200); 
      destNav.modalPresentationStyle = UIModalPresentationPopover; 
      _dateTimePopover8 = destNav.popoverPresentationController; 
      _dateTimePopover8.delegate = self; 
      _dateTimePopover8.sourceView = self.view; 
      _dateTimePopover8.sourceRect = [sender frame]; 
      destNav.modalPresentationStyle = UIModalPresentationPopover; 
      destNav.navigationBarHidden = YES; 
      [self presentViewController:destNav animated:YES completion:nil]; 

PopOverPresentationcontroller zeigen Sie bemerkt haben müssen, dass wir View Controller statt präsentieren popOver.So präsentieren wir diese in neue Art und Weise also.It automatisch verbergen versteckt, wenn wir klicken auf dem Bildschirm.

-(void)hideIOS8PopOver 
{ 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

Wir haben die Delegierten von UIPopoverPresenatationController bei der Umsetzung file.Write unter Delegatmethode in Implementierungsdatei zu implementieren.

- (UIModalPresentationStyle) adaptivePresentationStyleForPresentationController: (UIPresentationController *) controller { 
    return UIModalPresentationNone; 
} 
+0

Es funktioniert. Danke dir so sehr –

+0

Dein Willkommen :) –

2

Popover Regler sind ausschließlich für die Verwendung auf dem iPad-Geräte.

Edit: Wie Soberman angegeben, da iOS 8 ist es möglich, popovers auf dem iPhone mit dem öffentlichen APIs zu präsentieren, so dass diese Antwort ist wahrscheinlich nicht mehr relevant.

Wie auf UIPopoverController in Apples Dokumentation angegeben:

Popover Regler sind ausschließlich für die Verwendung auf dem iPad-Geräte. Also gibt es keine Möglichkeit, diese Klasse leider in iPhone-Anwendung zu verwenden. Aber es gibt ein paar benutzerdefinierte Drittanbieter-Implementierungen der Funktionalität von UIPopoverController zur Verfügung gestellt, die iPhone-Unterstützung und mehr hinzufügen. Siehe zum Beispiel https://github.com/50pixels/FPPopover.

Edit: Es gibt auch eine andere hoch anpassbare Popover-Implementierung für beide iPhone/iPad lohnt sich auschecken: https://github.com/nicolaschengdev/WYPopoverController.

+0

Vielen Dank für die Antwort. –

+0

Stimmen Sie ab und akzeptieren Sie, wenn Sie zufrieden sind. –

+0

Sicher. Vielen Dank. Bitte stimmen Sie die Frage ab, wenn Sie denken, dass es auch anderen hilft. Vielen Dank. –