如何自定义/设置一个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中的UIPopoverBackgroundView
在UIPopoverBackgroundView
上添加一个简单的tintColor
属性。
PCPopoverController
: https : //github.com/pcperini/PCPopoverController
我尝试通过自定义popup窗口中的视图控制器,然后使用此代码隐藏popup边框来欺骗它:
UIView * border = [[insideViewController.view.superview.superview.superview subviews] objectAtIndex:0]; border.hidden = YES;
该应用程序实际上仍在开发中,所以我希望其他人会对此解决scheme发表评论。
看看这些最新的项目利用UIPopoverBackgroundView https://github.com/CRedit360/C360PopoverBackgroundView https://github.com/GiK/GIKPopoverBackgroundView
我知道这是一个糟糕的答案,但我刚刚玩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]; }