2016-11-03 1 views
1

iPad seule partie de mon application:Quelle est la valeur UIColor par défaut de la fenêtre racine?

enter image description here

enter image description here

enter image description here

Toutes mes vues utiliser la couleur de fond 'par défaut' ou:

<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/> in my storyboard XML. 

I vouloir tr y et déterminer la couleur par défaut de la vue racine (la vue en bas de la pile), qui est la suivante:

UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController; 

La raison, est que je superposant une vue, d'abord dans le détail ou à droite côté de l'UISplitViewController, de sorte que lorsque la vue de détail se charge pour la première fois, je peux mettre une image de démarrage dans cette vue. Lorsque l'utilisateur sélectionne une cellule de vue de table dans le contrôleur de navigation gauche du contrôleur de vue partagée, les détails apparaissent dans le côté droit et la vue de démarrage est supprimée.

Je veux garder l'apparence de mon interface utilisateur cohérente. Je ne peux pas utiliser le [UIColor groupTableViewBackgroundColor] pour la vue splash car cette couleur est transparente et apparaîtra dans la vue détaillée en dessous. La vue détaillée à ce stade consiste en une série d'étiquettes & champs de texte. Les champs de texte sont vides, car aucune cellule de vue de table sur le contrôleur de navigation de gauche du contrôleur de vue partagée n'a encore été sélectionnée. Par conséquent, je veux essayer de définir la couleur d'arrière-plan de la vue de démarrage sur la même valeur que la vue racine ou la fenêtre de mon application.

Je souhaite que la couleur d'arrière-plan sur le côté droit de la première capture d'écran corresponde à la couleur d'arrière-plan sur le côté droit de la seconde capture d'écran (voir ci-dessus). À l'heure actuelle, la première capture d'écran a une couleur de fond de blanc. Je ne peux pas sembler correspondre le gris de la deuxième capture d'écran par oeil, donc j'ai besoin de lire avec précision cette valeur par programmation. Des idées?

Pouvez-vous me dire comment je peux déterminer cette valeur en tant que valeur UIColor?

J'ai essayé de faire:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { 
     UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController; 
     UINavigationController *navigationController = [splitViewController.viewControllers objectAtIndex:0]; 
     UINavigationController *detailController = [splitViewController.viewControllers objectAtIndex:1]; 
     UINavigationBar *navBar = navigationController.navigationBar; 
     navBar.tintColor = [UIColor colorWithRed: 0.968627f green:0.584314f blue:0.12549f alpha:1.0f]; 
     UINavigationBar *navBarDetail = detailController.navigationBar; 
     navBarDetail.tintColor = [UIColor colorWithRed: 0.968627f green:0.584314f blue:0.12549f alpha:1.0f]; 
     UIToolbar *toolBar = navigationController.toolbar; 
     UIToolbar *toolBarDetail = detailController.toolbar; 
     NSLog(@"rootviewcontrollerColor: %@",self.window.backgroundColor); 
     splitViewController.delegate = (id)detailController.topViewController; 
    } 
    else{ 
     UINavigationController *navController = (UINavigationController *)self.window.rootViewController; 
     UINavigationBar *navBar = navController.navigationBar; 
     navBar.tintColor = [UIColor colorWithRed: 0.968627f green:0.584314f blue:0.12549f alpha:1.0f]; 
     UIToolbar *toolBar = navController.toolbar; 
    } 
    return YES; 
} 

La sortie du NSLog est:

03/11/2016 14: 06: 49,610 Yoga Therapy [96158: 19a03] rootviewcontrollerColor: (null)

MISE À JOUR:

Lorsque je tente:

NSLog (@ "rootviewcontrollerColor:% @", self.window.rootViewController.view.backgroundColor);

Je reçois:

UIDeviceWhiteColorSpace 0 1

Comment puis-je convertir en UIColor?

MISE À JOUR:

Permettez-moi & expliquer une autre façon. Imaginez que vous créez une application avec un seul UIView, avec la couleur d'arrière-plan par défaut [groupTableViewBackgroundColor], comme contrôleur racine. Lorsque vous exécutez le code dans le simulateur, l'iPad sera rempli d'une couleur grise. Quelle est la valeur RGB de cette couleur? Le mot le plus proche, je peux penser, pour décrire cette couleur est la 'couleur de la fenêtre System' ...

+0

self.window.rootViewController.view.backgroundColor est déjà un UIColor. Est-ce que vous vous attendez à ce que NSLog imprime que c'est UIColor.gray ou quelque chose? –

+0

@David Lari J'espérais pouvoir avoir une représentation rgb, parce que je ne sais pas comment convertir UIDeviceWhiteColorSpace 0 1 en rgb pour l'utiliser avec UIColor? –

+0

@David Lari Désolé David. Voulez-vous dire que UIDeviceWhiteColorSpace 0 1 est une valeur UIColor valide? Comme [UIColor UIDeviceWhiteColorSpace 0 1]? –

Répondre

0
CGColorRef colorRef = self.window.rootViewController.view.backgroundColor.CGColor; 
NSString *colorString = [CIColor colorWithCGColor:colorRef].stringRepresentation; 
NSLog(@"colorString = %@", colorString); 

Sortie:

enter image description here

+0

Merci pour la réponse, mais cela ne me dit pas quelle est la couleur de fond de la racine? Votre code est juste un conditionnel qui me dit si la couleur est orange ou non? –

+0

@CharlesRobertson Voici une modification à la réponse. –

+0

Merci pour ça. Puis-je utiliser UIDeviceWhiteColorSpace 0 1 comme colorRef pour obtenir sa représentation RVB? –