UIPopoverPresentationController 在 iPhone 上显示全屏模式
UIPopoverPresentationController is showing full screen modal on iPhone
在 iPad UIPopoverPresentationController 工作正常,但在 iPhone 它总是显示完整的 window 模式弹出窗口。我正在使用以下代码:
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;
}
Popover controllers are for use exclusively on iPad devices.
编辑:如 Soberman 所述,自 iOS 8 以来,可以使用 public API 在 iPhone 上显示弹出窗口,因此此答案可能不再相关。
如 Apple 关于 UIPopoverController 的文档所述:
Popover 控制器专供 iPad 设备使用。
因此,不幸的是,无法在 iPhone 应用程序中使用此 class。但是有一些由 UIPopoverController 提供的功能的自定义第三方实现,它们添加了 iPhone 支持等等。例如,参见 https://github.com/50pixels/FPPopover。
编辑:iPhone/iPad 还有另一个高度可定制的弹出窗口实现值得一试:https://github.com/nicolaschengdev/WYPopoverController。
在ViewController.h先做一个属性的UIPopoverPresenatationController
@property(nonatomic,retain)UIPopoverPresentationController *dateTimePopover8;
然后显示PopOverPresentationcontroller
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];
您一定已经注意到我们正在呈现 View Controller 而不是呈现 popOver.So 我们必须以新的方式隐藏它 also.It 当我们点击屏幕时自动隐藏。
-(void)hideIOS8PopOver
{
[self dismissViewControllerAnimated:YES completion:nil];
}
我们必须在实现文件中的委托方法file.Write下面实现 UIPopoverPresenatationController 的委托。
- (UIModalPresentationStyle) adaptivePresentationStyleForPresentationController: (UIPresentationController * ) controller {
return UIModalPresentationNone;
}
在 iPad UIPopoverPresentationController 工作正常,但在 iPhone 它总是显示完整的 window 模式弹出窗口。我正在使用以下代码:
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;
}
Popover controllers are for use exclusively on iPad devices.
编辑:如 Soberman 所述,自 iOS 8 以来,可以使用 public API 在 iPhone 上显示弹出窗口,因此此答案可能不再相关。
如 Apple 关于 UIPopoverController 的文档所述:
Popover 控制器专供 iPad 设备使用。 因此,不幸的是,无法在 iPhone 应用程序中使用此 class。但是有一些由 UIPopoverController 提供的功能的自定义第三方实现,它们添加了 iPhone 支持等等。例如,参见 https://github.com/50pixels/FPPopover。
编辑:iPhone/iPad 还有另一个高度可定制的弹出窗口实现值得一试:https://github.com/nicolaschengdev/WYPopoverController。
在ViewController.h先做一个属性的UIPopoverPresenatationController
@property(nonatomic,retain)UIPopoverPresentationController *dateTimePopover8;
然后显示PopOverPresentationcontroller
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];
您一定已经注意到我们正在呈现 View Controller 而不是呈现 popOver.So 我们必须以新的方式隐藏它 also.It 当我们点击屏幕时自动隐藏。
-(void)hideIOS8PopOver
{
[self dismissViewControllerAnimated:YES completion:nil];
}
我们必须在实现文件中的委托方法file.Write下面实现 UIPopoverPresenatationController 的委托。
- (UIModalPresentationStyle) adaptivePresentationStyleForPresentationController: (UIPresentationController * ) controller {
return UIModalPresentationNone;
}