如何在iPhone上的UIPopoverController中显示NavigationController-background

时间:2012-02-11 17:14:10

标签: iphone ios cocoa-touch uikit uipopovercontroller

如何在iPhone上的UIPopovercontroller中显示NavigationController的背景(包括标题/按钮)?

目前它看起来像是:

enter image description here

在我的PopoverView-ViewController中:

- (void)viewDidLoad
{
[super viewDidLoad];

self.navigationController.navigationBar.hidden = NO;
self.navigationController.navigationBarHidden = NO;

self.navigationItem.title = @"self.navigationItem.title";
}

调用Popover时:

InfoView *iv = [[InfoView alloc] initWithNibName:@"InfoView" bundle:nil];


    UINavigationController *uc = [[UINavigationController alloc] initWithRootViewController:iv];


    self.pop = [[UIPopoverController alloc] initWithContentViewController:uc];
    [self.pop setDelegate:self];
    [self.pop presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:true];

它应该如下所示:

enter image description here

5 个答案:

答案 0 :(得分:2)

首先,UINavigationController没有自己的背景,它显示了内容视图控制器的背景。如果您可以成功显示带有导航控制器的弹出窗口,请检查您的InfoView。它的观点是否有一些背景?

其次,我尝试在iPhone上以不同的配置多次执行您的代码,但始终收到错误

  

由于未捕获的异常而终止应用   'NSInvalidArgumentException',原因:' - [UIPopoverController   initWithContentViewController:]当未运行时调用   UIUserInterfaceIdiomPad

这对我来说并不意外。即使您可以使其工作,Apple也可能拒绝您的申请。 2.1崩溃的应用将被拒绝 - 只需在多个设备上测试您的代码并查看结果。

答案 1 :(得分:2)

你的代码

InfoView *iv = [[InfoView alloc] initWithNibName:@"InfoView" bundle:nil];


UINavigationController *uc = [[UINavigationController alloc] initWithRootViewController:iv];


self.pop = [[UIPopoverController alloc] initWithContentViewController:uc];
[self.pop setDelegate:self];
[self.pop presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:true];

是完美的,只需隐藏默认导航控制器并在InfoView.xib的XIB中添加navigationBar,然后在其中编写cancelButtonAction以执行视图的解除或tableview选择的详细信息。它运行正常,请检查我以同样方式完成的图像,并相信我的工作正常。enter image description here

答案 2 :(得分:1)

在行[self.pop presentPopoverFromBarButtonItem:se..

之前将其添加到您的代码中
uc.modalPresentationStyle = UIModalPresentationCurrentContext;

请参阅modalPresentationStyle property的文档。

答案 3 :(得分:0)

我认为您需要为InfoView控制器粘贴更多代码,因为我怀疑问题出在哪里。

答案 4 :(得分:0)

您是否尝试过将背景视图设置为班级?

    [pop setPopoverBackgroundViewClass:bgView];