定制QLPreviewController

我在定制QLPreviewController的外观时QLPreviewController了一个问题。

我们可以通过在导航控制器中将其推入,或将其呈现在ModalViewController中来显示QLPreviewController。 由于我的navigationController的酒吧自定义了一点(tintColor),我推QLPreviewController保存我的配色scheme。 但是,当我推它,QLPreviewController似乎有一些问题:我需要系统地调用[qlpvc reloadData],以便我的文件显示。

在iOS [编辑]中,即使使用reloadData,也不会显示任何推送方式(实际上是以随机方式显示)。 所以我决定只使用可靠的Modal方法会很有趣。

所以我的观点是我想在ModalViewController中呈现我的QLPreviewController。 它的工作方式很好,但我不能自定义viewController的外观。

例如在didSelectRowAtIndexPath如果我这样做:

(如果我犯了一个错误,我没有接近我的消息来源,所以请原谅我)

 QLPreviewController *qlpvc = [[QLPreviewController alloc] init]; qlpvc.dataSource = self; // Data Source Protocol & methods implemented of course No need for delegate in my case so //qlpvc.delegate = self; qlpvc.currentPreviewItemIndex = [indexPath.row]; // The following doesn't work : [qlpvc.navigationController.navigationBar setTintColor:[UIColor redColor]]; // The following doesn't work too : [qlpvc.modalViewController.navigationController.navigationBar setTintColor:[UIColor redColor]]; [self presentModalViewController:qlpvc animated:YES]; [qlpvc release]; 

tl; dr版本:如何pipe理自定义我的模式 QLPreviewController的外观? 尤其是navigationBar的tintColor?

非常感谢。

这是有效的,但是我不知道它是否会被苹果公司拒绝,因为它不是一个公开的方法,并可能在未来的操作系统版本中打破。 适用于iOS6。

添加到预览控制器数据源方法:

 - (id <QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index { for (id object in controller.childViewControllers) { if ([object isKindOfClass:[UINavigationController class]]) { UINavigationController *navController = object; navController.navigationBar.tintColor = [UIColor colorWithRed:0.107 green:0.360 blue:0.668 alpha:1.000]; } } NSString *pathToPdfDoc = [[NSBundle mainBundle] pathForResource:@"MyPDFFile" ofType:@"pdf"]; return [NSURL fileURLWithPath:pathToPdfDoc]; } 

子类QLPreviewController并在viewDidLoad:更改tintColor等。

如果你想在整个应用中保持简单的样式,比如tintColor,你应该考虑在很多UIView类上使用UIAppearanceselect器。 以下示例自定义UINavigationBar的所有实例,包括QLPreviewController中显示的实例:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ //.. [self initAppearance]; return YES; } -(void)initAppearance{ UINavigationBar* defaultNavigationBar = [UINavigationBar appearance]; UIImage *backgroundImage = [UIImage imageNamed:@"MY_IMAGE.png"] NSDictionary *defaultNavigationBarDictionary = [NSDictionary dictionaryWithObjectsAndKeys: [UIFont fontWithName:@"Futura-Medium" size:19], NSFontAttributeName, [UIColor blueColor], UITextAttributeTextColor, [UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.0f], UITextAttributeTextShadowColor, [NSValue valueWithUIOffset:UIOffsetMake(0.0f, 2.0f)], UITextAttributeTextShadowOffset, nil]; defaultNavigationBar.titleTextAttributes = defaultNavigationBarDictionary; //iOS5 //[defaultNavigationBar setBackgroundImage:backgroundImage forBarMetrics:UIBarMetricsDefault]; //iOS5 [defaultNavigationBar setBarTintColor:[UIColor redColor]]; //iOS7 [defaultNavigationBar setShadowImage:[[UIImage alloc] init]]; //iOS6, removes shadow [defaultNavigationBar setTitleVerticalPositionAdjustment:0.0f forBarMetrics:UIBarMetricsDefault]; //iOS5 [defaultNavigationBar setBackIndicatorImage:[UIImage imageNamed:@"BACK_ARROW.png"]]; //iOS7 [defaultNavigationBar setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"BACK_ARROW.png"]]; //iOS7 }