如何自定义/设置一个UIPopoverController

我正在研究iPad应用程序,并使用UIPopoverControllers。 我在应用程序需要品牌和风格的一部分,我想知道如何改变UIPopoverController的颜色/色调? 标准是深蓝色,但它需要另一种颜色..

这可能吗?

问候,托马斯

可能iOS 5.0开始,通过UIPopoverBackgroundView抽象类UIPopoverBackgroundView并将您的子类分配给UIPopoverController实例上的popoverBackgroundViewClass属性。 不幸的是,没有tintColor属性,因为popup窗口需要使用图片的箭头和边框来实现dynamicresize时的stream畅animation。 您可以在UIPopoverBackgroundView类参考中了解更多关于如何自定义UIPopoverController的外观

现在不可能。

这就是我所说的“Box in a Box”模式。 你可以控制盒子内的盒子( UIPopoverController里面的UIViewController ),但是你对实际的popup窗口本身的控制非常有限。 在箭头方向和大小之外,你不能改变其他的东西。 还有一个模式效果popup窗口的选项,当它显示时,其他东西变暗,但我没有试图让它工作。

我相信你已经注意到现在还没有UIPopover类。

你想听到的答案是:
如果你真的想要一个不好的样式,就写下你自己的。 真的不那么难

您要点击的链接:
Cocoacontrols是GitHub上可用的iOS和OSX组件的索引, 它们有一些popover的东西。

iOS 7引入了UIPopoverController backgroundColor属性,它影响/包含导航背景颜色以及UIPopoverController箭头。

 @property (nonatomic, copy) UIColor *backgroundColor NS_AVAILABLE_IOS(7_0); 

用法示例:

  if ([self.popoverVC respondsToSelector:@selector(setBackgroundColor:)]) { // Check to avoid app crash prior to iOS 7 self.popoverVC.backgroundColor = [UIColor greenColor]; // [UIColor colorWithPatternImage:@"..."] doesn't reflect the color on simulator but on device it works! } 

– 截至目前(iOS 7.0.3),在某些情况下(如使用colorWithPatternImage :)设置颜色,模拟器(甚至一些设备)不尊重颜色。

把我的帽子扔在这里;

我已经利用iOS 5中的UIPopoverBackgroundViewUIPopoverBackgroundView上添加一个简单的tintColor属性。

PCPopoverController : https : //github.com/pcperini/PCPopoverController

我尝试通过自定义popup窗口中的视图控制器,然后使用此代码隐藏popup边框来欺骗它:

 UIView * border = [[insideViewController.view.superview.superview.superview subviews] objectAtIndex:0]; border.hidden = YES; 

该应用程序实际上仍在开发中,所以我希望其他人会对此解决scheme发表评论。

从ios 5开始,这是可以做到的,这里是一个图书馆

https://github.com/ddebin/DDPopoverBackgroundView

只要看看文档,这是很容易的

祝你好运

我知道这是一个糟糕的答案,但我刚刚玩UIPopoverController的意见。 他们确实存在。

访问它们的唯一方法是从您的视图,坐在UIPopovercontroller。

我有一个导航控制器,所以我遵循这个层次结构

 UIView *test = ((UIView *)[[[self.navigationController.view.superview.superview.subviews objectAtIndex:0] subviews] objectAtIndex:1]); UIView *test2 = ((UIView *)[[[self.navigationController.view.superview.superview.subviews objectAtIndex:0] subviews] objectAtIndex:1]); test.backgroundColor = [UIColor greenColor]; test2.backgroundColor = [UIColor greenColor]; 

这不完全是最终目标,但它非常接近。

你会发现the_view_in_the_popover.superview.superview (如果你没有从导航控制器视图中the_view_in_the_popover.superview.superview ,也许只有一个超级视图)是一个UIPopoverView。 如果你把它作为一个UIView,并把它当作一个UIView,你并没有真的违反任何规则。 我想这是真的取决于苹果。

删除UIPopoverController边框:

  NSArray* subviews = ((UIView*)[popupController.contentViewController.view.superview.superview.superview.subviews objectAtIndex:0]).subviews; for(UIView *subview in subviews){ [subview removeFromSuperview]; }