如何自定义/设置UIPopoverController的样式

时间:2010-03-31 12:06:05

标签: coding-style ipad uipopovercontroller customization

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

这可能吗?

Greets,Thomas

10 个答案:

答案 0 :(得分:51)

可能 iOS 5.0 开始,通过继承抽象类UIPopoverBackgroundView并将您的子类分配给{popoverBackgroundViewClass属性UIPopoverController。 3}}实例。不幸的是,没有tintColor属性,因为popover需要使用图像作为箭头和边框,以便在动态调整大小时实现平滑的动画。您可以在UIPopoverBackgroundView Class Reference

中了解有关如何自定义UIPopoverController外观的更多信息

答案 1 :(得分:21)

现在不可能。

这就是我所谓的“Box in a Box”模式。您可以控制框内部的框(UIViewController内部的UIPopoverController),但您对实际弹出窗口本身的控制非常有限。在箭头方向和大小之外,你不能改变太多其他东西。还有一个模态效果弹出窗口的选项,当它出现时会使其他所有内容变暗,但我还没有尝试让它工作。

我相信你现在已经注意到没有UIPopover课了。

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

您要点击的链接:
Cocoacontrols是GitHub上可用的iOS和OSX组件的索引,they have some popover stuff.

答案 2 :(得分:13)

iOS 7引入了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设置颜色:),模拟器(甚至某些设备)不支持颜色。< / p>

答案 3 :(得分:8)

把帽子扔在这里;

我利用iOS 5+中的UIPopoverBackgroundView来向tintColor添加一个简单的UIPopoverController属性。

PCPopoverControllerhttps://github.com/pcperini/PCPopoverController

答案 4 :(得分:0)

我尝试通过自定义弹出框内的视图控制器然后使用以下代码隐藏弹出边框来欺骗它:

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

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

答案 5 :(得分:0)

答案 6 :(得分:0)

从ios 5开始就可以完成,这里是一个库

https://github.com/ddebin/DDPopoverBackgroundView

只需查看文档,就可以轻松了解

祝你好运

答案 7 :(得分:0)

您可以仅使用Elegant Popover cocoapod。您可以自定义箭头和弹出框本身的形状和颜色。另外,您可以在弹出框上添加彩色边框。

答案 8 :(得分:-1)

我知道这是一个糟糕的构建答案,但我一直在玩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(如果你没有从导航控制器视图中伸出,可能只是一个超级视图)是UIPopoverView。如果你把它作为UIView投射并将其视为UIView,那么你并没有真正违反任何规则。我想这真的取决于苹果。

答案 9 :(得分:-3)

删除UIPopoverController边框:

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