Objective c UISplitViewController:如何呈现popover?
我有一个Objective c UISplitViewController:如何呈现popover?,objective-c,ios,cocoa-touch,ipad,uisplitviewcontroller,Objective C,Ios,Cocoa Touch,Ipad,Uisplitviewcontroller,我有一个UISplitViewController,它是一个UISplitViewControllerDelegate,具有以下委托方法: splitViewController:willHideViewController:带BarbuttonItem:用于PopOvercontroller: 当iPad以纵向方式启动时,我希望SplitView中的Popover可见。我该怎么做 我尝试了以下代码: - (void)splitViewController:(UISplitViewControl
UISplitViewController
,它是一个UISplitViewControllerDelegate
,具有以下委托方法:
splitViewController:willHideViewController:带BarbuttonItem:用于PopOvercontroller:
当iPad以纵向方式启动时,我希望SplitView中的Popover可见。我该怎么做
我尝试了以下代码:
- (void)splitViewController:(UISplitViewController *)svc
willHideViewController:(UIViewController *)aViewController
withBarButtonItem:(UIBarButtonItem *)barButtonItem
forPopoverController:(UIPopoverController *)pc
{
//setting the barButtonItem in the toolbar in the detail view.
[pc presentPopoverFromBarButtonItem:barButtonItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:NO];
}
但是上面的代码给了我以下错误:
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[UIPopoverController presentPopoverFromRect:inView:permittedArrowDirections:animated::无法从没有窗口的视图中显示弹出窗口。”
只有一个问题,调用presentPopover方法的位置不对,即splitViewController:*WillHide*ViewController。。。。。。。所以,巴布托主义存在,但不出现在屏幕上。我使用了下一个代码,它对我有效。 要处理所有情况,你需要使用两种方法
- (void)viewDidAppear:(BOOL)animated
{
if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait || [[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown) {
if (self.view.window != nil) {
[_masterPopoverController presentPopoverFromRect:CGRectMake(0, 0, 1, 1) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:NO];
}
}
[super viewDidAppear:animated];
}
及
您将此代码放在代码的何处?我尝试过处理指向我的ViewController的PopoverController指针,但是当我想要显示popover时,它似乎被更改为nil。
-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
if (fromInterfaceOrientation == UIDeviceOrientationLandscapeLeft || fromInterfaceOrientation == UIDeviceOrientationLandscapeRight) {
if (self.view.window != nil) {
[_masterPopoverController presentPopoverFromRect:CGRectMake(0, 0, 1, 1) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:NO];
}
}
}