如何在iPhone上的UIPopovercontroller中显示NavigationController的背景(包括标题/按钮)?
目前它看起来像是:
在我的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];
它应该如下所示:
答案 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选择的详细信息。它运行正常,请检查我以同样方式完成的图像,并相信我的工作正常。
答案 2 :(得分:1)
在行[self.pop presentPopoverFromBarButtonItem:se..
:
uc.modalPresentationStyle = UIModalPresentationCurrentContext;
答案 3 :(得分:0)
我认为您需要为InfoView控制器粘贴更多代码,因为我怀疑问题出在哪里。
答案 4 :(得分:0)
您是否尝试过将背景视图设置为班级?
[pop setPopoverBackgroundViewClass:bgView];