68 votes

Impossible de définir la couleur du texte des boutons Envoyer et Annuler dans le composeur de courrier lorsqu'il est présenté à partir de UIActivityViewController dans iOS7

Je suis l'aide de la UIActivityViewController pour partager des éléments dans iOS7. Quand j'appuyez sur l'option de Messagerie, il s'ouvre le mail compositeur, mais l'Annuler et de les Envoyer sur les boutons de la barre de navigation et la barre de navigation lui-même sont en bleu, il est très difficile à lire, donc je veux changer leur couleur. Il travaille dans iOS6, mais pas dans iOS7.

J'ai essayé

[[UIBarButtonItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor redColor], UITextAttributeTextColor, [UIColor clearColor], UITextAttributeTextShadowColor, nil] forState:UIControlStateNormal];

qui travaille dans iOS6, et j'ai essayé

[[UIBarButtonItem appearance] setTintColor:[UIColor redColor]];
[[UINavigationBar appearance] setBarTintColor:[UIColor redColor]];

ce qui provoque la couleur à clignoter en rouge la première fois que l'application est exécutée immédiatement avant de passer à la couleur bleu.

76voto

Alex Points 493

Réussi à changer la couleur du texte de l' Envoyer et Annuler les boutons, qui sont à l' UINavigationBar dans la MFMailComposerViewController (à la fois Envoyer et Annuler) et MFMessageComposeViewController (seulement Annuler), lors de la présentation de UIActivityViewController.

À l'aide d'un UIActivityViewController, appuyez sur Messageou Mail:

Using an UIActivityViewController

Vous remarquerez que la couleur du texte par défaut de l' Envoyer et Annuler les boutons de bleu:

Default blue colors

Pour changer cela, en AppDelegate.m classe, en didFinishLaunchingWithOptions méthode, insérer la ligne suivante:

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTintColor:[UIColor whiteColor]];

Il en résulte:

Changed to white

Vous pouvez également utiliser d'autres couleurs, par exemple:

[UIColor purpleColor];

Change to purple

[UIColor greenColor];

Changed to green

Comment ai-je tester? J'ai remarqué que cette solution fonctionne pour les personnes suivantes:

  • avec Xcode 5.1, dans l'iOS 7.1 simulateur, la construction de la base SDK iOS 7.1 (peut être choisi en sélectionnant le fichier de projet -> Paramètres de construction -> Base SDK. Aussi, sélectionnés à partir de Général -> Cible de Déploiement -> 7.1)
  • avec Xcode 5.1, sur un iPhone 4, construction de la base SDK iOS 7.0 (peut être choisi en sélectionnant le fichier de projet -> Paramètres de construction -> Base SDK. Aussi, sélectionnés à partir de Général -> Cible de Déploiement -> 7.0)
  • avec Xcode 5.1, sur un iPhone 4, construction de la base SDK iOS 7.1 (peut être choisi en sélectionnant le fichier de projet -> Paramètres de construction -> Base SDK. Aussi, sélectionnés à partir de Général -> Cible de Déploiement -> 7.1)

Cela n'a pas fonctionné lors du test avec:

  • avec Xcode 5.1, iOS 7.0 simulateur, la construction de la base SDK iOS 7.0 (peut être choisi en sélectionnant le fichier de projet -> Paramètres de construction -> Base SDK. Aussi, sélectionnés à partir de Général -> Cible de Déploiement -> 7.0)

Par conséquent, il doit être sûr à utiliser, je crois que le comportement sur le périphérique réel est plus important que le comportement dans le simulateur iOS. Si quelqu'un sait pourquoi ça ne marche pas sous iOS 7.0 simulateur, je voudrais savoir. :)

6voto

Maciej Swic Points 2010

Voici ce qui fonctionne sur iOS 7.1 à compter d'aujourd'hui.

Sous-classe UIActivityViewController et substituez la méthode suivante:

 - (void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion
{
    viewControllerToPresent.view.tintColor = [UIColor whiteColor];

    [super presentViewController:viewControllerToPresent animated:flag completion:^{
        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

        if (completion) {
            completion();
        }
    }];
}
 

Cela rendra les boutons blancs et la barre d'état blanche.

3voto

Cela semble être un bug avec iOS 7. J'ai vu d'autres rapports à ce sujet en ligne. Il ne semble pas non plus être corrigé dans iOS 7.1.

Pour être précis, peu importe ce que vous faites, vous ne pouvez pas définir de couleurs de teinte sur les barres de navigation pour les boîtes de dialogue affichées à partir de UIActivityViewController.

3voto

paillou Points 31

J'ai eu le même problème avec mon application, où l' tintColor de la propriété de l' UINavigationBar est blanc partout avec vous grâce à l'apparition de proxy. L'effet qui en résulte est que l' UIBarButtonItem à partir de la messagerie compositeur-vue-contrôleur navigationBar n'étaient pas visibles (boutons blancs sur un fond blanc de la barre de navigation).

J'ai cet appel dans mon application:didFinishLaunchingWithOptions: méthode:

[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];

Comme il est impossible (pour l'instant ?) pour accéder à l' UINavigationBar de l'e-mail compositeur-vue-contrôleur dans l' UIActivityViewController, j'ai fait la solution de contournement suivante qui est inspirée de Alex de la réponse:

UIColor *normalColor = [[UINavigationBar appearance] tintColor];
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:dataToShare applicationActivities:nil];
            [activityViewController setCompletionHandler:^(NSString *activityType, BOOL completed) {
                // back to normal color
                [[UINavigationBar appearance] setTintColor:normalColor];
            }];
            [self presentViewController:activityViewController animated:YES completion:^{
                // change color temporary
                [[UINavigationBar appearance] setTintColor:[UIColor colorWithRed:232.0f/255.0f green:51.0f/255.0f blue:72.0f/255.0f alpha:1.0f]];
            }];

PS: ce code est destiné pour iOS 7, mais vous pouvez utiliser [[UIBarButtonItem appearance] setTintColor:] dans iOS 6 (cf Kevin van Mierlo réponse)

1voto

Kevin van Mierlo Points 1382

Si vous souhaitez définir la couleur des boutons d'annulation et d'envoi dans iOS 7, vous devez utiliser ceci:

 // Change the colours of the buttons in iOS 7
[[UINavigationBar appearance] setTintColor:[UIColor redColor]];
 

Dans iOS 6, il s’agit bien de cela et vous devriez également laisser cela dans votre code:

 // Change the colours of the buttons in iOS 6
[[UIBarButtonItem appearance] setTintColor:[UIColor redColor]];

// Change the color of the the navigation bar in iOS 6 and 7
[[UINavigationBar appearance] setBarTintColor:[UIColor redColor]];
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X