如何在 iPhone 上的 UIPopoverController 中显示 NavigationController-background
Posted
技术标签:
【中文标题】如何在 iPhone 上的 UIPopoverController 中显示 NavigationController-background【英文标题】:How to display NavigationController-background within a UIPopoverController on iPhone 【发布时间】:2012-02-11 17:14:10 【问题描述】:如何在 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];
应该是这样的:
【问题讨论】:
@Rayfleck,你也可以在 iPhone 上使用它!!你读了问题并看图片了吗???不要为时过早。 ***.com/questions/6371508/… -- 这就是你要找的吗? @rakete - 是的,我看到了这张照片,并被它弄糊涂了。 ios 5.0 库 UIPopoverController 类参考说:Popover controllers are for use exclusively on iPad devices. Attempting to create one on other devices results in an exception.
【参考方案1】:
起初 UINavigationController 没有自己的背景,它显示内容视图控制器的背景。如果您可以成功显示带有导航控制器的弹出框,请检查您的 InfoView。它的视图有一些背景吗?
其次,我尝试在 iPhone 上以不同的配置多次执行你的代码,但总是收到错误
由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'-[UIPopoverController initWithContentViewController:] 在 未运行时调用 UIUserInterfaceIdiomPad.
这对我来说并不意外。即使你能让它工作,Apple 也可能会拒绝你的申请。 2.1 崩溃的应用程序将被拒绝 - 只需在多台设备上测试您的代码并查看结果。
【讨论】:
我不需要内容的背景。我想显示栏的背景,其中包括导航控制器顶部的标题和按钮。你得到这个错误是因为你必须重写 UIPopoverController-Class 的一个方法。不幸的是,我不能说你是哪个,因为目前我无法访问代码。【参考方案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选择的详细信息。它工作正常,请检查我以相同方式完成的图像,相信我它工作正常。
【讨论】:
谢谢。现在我看到一个导航栏。但它有标准的蓝色背景。我想在弹出框边框的渐变中“集成”导航。 你可以改变你想要的字体的渐变。选择您的导航栏样式为 UIBarStyleDefault、UIBarStyleBlack、UIBarStyleBlackOpaque。您也可以更改条形图的颜色。【参考方案3】:将此添加到您的代码中 [self.pop presentPopoverFromBarButtonItem:se..
行之前:
uc.modalPresentationStyle = UIModalPresentationCurrentContext;
请参阅modalPresentationStyle property 的文档。
【讨论】:
感谢您的回答。但不幸的是,背景仍然是不可见的。【参考方案4】:我认为您需要为 InfoView 控制器粘贴更多代码,因为我怀疑这就是问题所在。
【讨论】:
那么这就是问题所在;)【参考方案5】:您是否尝试过将背景视图设置为班级?
[pop setPopoverBackgroundViewClass:bgView];
【讨论】:
以上是关于如何在 iPhone 上的 UIPopoverController 中显示 NavigationController-background的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iPhone 上的 UIPopoverController 中显示 NavigationController-background
在 iPhone 上处理时如何使 iPad 上的 iOS 推送通知无效?