UIPopViewController不工作

我有一个.h和.m链接的xib文件。 在xib中有一个带有textView的UIView。 我想用这个视图做的事情是当你点击一个button的时候打开它作为一个UIPopViewController。

这是我的代码:

- (IBAction)thisButton:(id)sender { popViewController *popVC = [[popViewController alloc] initWithNibName:@"popViewController" bundle:nil]; self.pop = [[UIPopoverController alloc] initWithContentViewController:popVC]; [self.pop setPopoverContentSize:CGSizeMake(220, 120) animated:YES]; [self.pop presentPopoverFromRect:[(UIButton *)sender frame] inView:self.view permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES]; } 

它坠毁与以下错误。

 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIPopoverController initWithContentViewController:] called when not running under UIUserInterfaceIdiomPad.' 

我不明白这个错误。

您只能在iPad应用程序中使用UIPopoverController。

 if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { // for iPads // here you can use UIPopoverController } else { // for iPhones } 

UIPopoverController仅适用于iPad。 在iOS 8中,您可以将UIPopoverPresentationController用于iPhone和iPad,并且有一个小技巧可以使其看起来像UIPopoverController


这里是你在我提供的链接中看到的Swift代码的Objective-C版本。

 @interface SomeViewController : UIViewController <UIPopoverPresentationControllerDelegate> @end @implementation SomeViewController -(void) prepareForSegue:(UIStoryboardSegue *) segue sender:(id) sender { if ([segue.identifier isEqualToString:@"PopoverSegue"]) { UIViewController *controller = segue.destinationViewController; controller.popoverPresentationController.delegate = self; controller.preferredContentSize = CGSizeMake(320, 186); } } // MARK: UIPopoverPresentationControllerDelegate -(UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller { // Return no adaptive presentation style, use default presentation behaviour return UIModalPresentationNone; } @end 

这必须为你们工作

 -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualToString:@"popoverSegue"]) { UIViewController *popUpControl=segue.destinationViewController; popUpControl.modalPresentationStyle=UIModalPresentationPopover; popUpControl.popoverPresentationController.delegate=self; } } -(UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller { return UIModalPresentationNone; }