Personnalisation de QLPreviewController

J'ai un problème dans la personnalisation de l'apparence de mon QLPreviewController .

Nous pouvons afficher un QLPreviewController en le poussant dans un controller de navigation ou en le présentant dans un ModalViewController. Comme ma barre de navigationController est un peu personnalisée (tintColor), j'appuie sur QLPreviewController pour conserver mon schéma de colors. Mais quand je le pousse, le QLPreviewController semble avoir quelques problèmes: je dois systématiquement appeler [qlpvc reloadData] pour que mon file soit affiché.

Dans iOS [SUPPRIMÉ], même avec reloadData, rien ne s'affiche en mode push (en fait, il s'affiche mais de manière random). J'ai donc décidé qu'il pourrait être intéressant de n'utiliser que la méthode Modal fiable.

Soooo mon point est que je veux présenter mon QLPreviewController dans un ModalViewController. Cela fonctionne très bien de cette façon, mais je ne peux pas personnaliser l'apparence de viewController.

Par exemple dans un didSelectRowAtIndexPath si je fais:

(Je n'ai pas mes sources près de moi donc excusez-moi si je fais une erreur)

 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; version dr: Comment gérer pour personnaliser l'apparence de mon modal QLPreviewController? Surtout la couleur de la barre de navigation?

Merci beaucoup.

Cela fonctionne, mais je ne sais pas si elle sera rejetée par Apple car ce n'est pas une méthode publiée et peut casser dans les futures versions de l'OS. Fonctionne dans iOS6.

Ajouter à la méthode de la source de données du controller de prévisualisation:

 - (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]; } } NSSsortingng *pathToPdfDoc = [[NSBundle mainBundle] pathForResource:@"MyPDFFile" ofType:@"pdf"]; return [NSURL fileURLWithPath:pathToPdfDoc]; } 

Sous-class QLPreviewController et modifiez le paramètre tintColor, et al dans viewDidLoad:

Si vous essayez de conserver un style simple tel que tintColor dans votre application, vous devriez envisager d'utiliser des sélecteurs UIAppearance sur de nombreuses classs UIView. L'exemple suivant personnalise toutes les instances de UINavigationBar, y compris celles affichées dans 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], NSFontAtsortingbuteName, [UIColor blueColor], UITextAtsortingbuteTextColor, [UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.0f], UITextAtsortingbuteTextShadowColor, [NSValue valueWithUIOffset:UIOffsetMake(0.0f, 2.0f)], UITextAtsortingbuteTextShadowOffset, nil]; defaultNavigationBar.titleTextAtsortingbutes = defaultNavigationBarDictionary; //iOS5 //[defaultNavigationBar setBackgroundImage:backgroundImage forBarMesortingcs:UIBarMesortingcsDefault]; //iOS5 [defaultNavigationBar setBarTintColor:[UIColor redColor]]; //iOS7 [defaultNavigationBar setShadowImage:[[UIImage alloc] init]]; //iOS6, removes shadow [defaultNavigationBar setTitleVerticalPositionAdjustment:0.0f forBarMesortingcs:UIBarMesortingcsDefault]; //iOS5 [defaultNavigationBar setBackIndicatorImage:[UIImage imageNamed:@"BACK_ARROW.png"]]; //iOS7 [defaultNavigationBar setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"BACK_ARROW.png"]]; //iOS7 }