web-dev-qa-db-fra.com

Comment personnaliser / styliser un UIPopoverController

Je travaille sur une application iPad et j'utilise UIPopoverControllers. Je suis à la partie où l'application doit être marquée et stylisée et je me demande comment changer la couleur/teinte de l'UIPopoverController? Le standard est bleu foncé mais il doit être d'une autre couleur.

est-ce possible?

Salut, Thomas

33
Thomas Joos

C'est possible à partir de iOS 5.0 en sous-classant la classe abstraite - UIPopoverBackgroundView et en affectant votre sous-classe à la propriété popoverBackgroundViewClass de votre instance UIPopoverController . Malheureusement, il n'y a pas de propriété tintColor car le popover doit utiliser des images pour sa flèche et sa bordure afin de réaliser des animations fluides pendant le redimensionnement dynamique. Vous pouvez en savoir plus sur la personnalisation de l'apparence d'un UIPopoverController dans le IPopoverBackgroundView Class Reference

51
Andrew

C'est impossible pour l'instant.

C'est ce que j'appelle le modèle "Box in a Box". Vous obtenez le contrôle de la boîte à l'intérieur de la boîte (le UIViewController à l'intérieur du UIPopoverController), mais vous avez un contrôle très limité sur le popover lui-même. En dehors de la direction de la flèche et de la taille, vous ne pouvez pas changer grand-chose d'autre. Il existe également des options pour un popover d'effet modal, qui atténue tout le reste lorsqu'il apparaît, mais je n'ai pas essayé de le faire fonctionner.

Je suis sûr que vous avez remarqué qu'il n'y a pas de classe UIPopover à ce jour.

La réponse que vous souhaitez entendre:
Si vous voulez vraiment en créer un aussi mauvais, écrivez le vôtre. Ce n'est vraiment pas si difficile.

Le lien sur lequel vous souhaitez cliquer:
Cocoacontrols est un index des composants iOS et OSX disponibles sur GitHub, ils ont des trucs popover.

21
Sneakyness

iOS 7 introduit la propriété backgroundColor de UIPopoverController qui affecte/inclut la couleur d'arrière-plan de navigation ainsi que les flèches de popover.

@property (nonatomic, copy) UIColor *backgroundColor NS_AVAILABLE_IOS(7_0);

Exemple d'utilisation:

    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!
    }

Remarque - À partir de maintenant (iOS 7.0.3), dans certains cas (comme définir la couleur à l'aide de colorWithPatternImage :), le simulateur (et même certains appareils) n'honore pas la couleur.

13
Ashok

Jeter mon chapeau ici;

J'ai utilisé UIPopoverBackgroundViews dans iOS 5+ pour ajouter une simple propriété tintColor à UIPopoverControllers.

PCPopoverController: https://github.com/pcperini/PCPopoverController

8
Patrick Perini
0
johndpope

à partir d'ios 5, cela peut être fait, voici une bibliothèque

https://github.com/ddebin/DDPopoverBackgroundView

il suffit de regarder la documentation, et c'est assez simple

bonne chance

0
Kshitiz Ghimire

J'essaie de le tromper en personnalisant le contrôleur de vue à l'intérieur du popover puis en masquant la bordure du popover en utilisant ce code:

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

L'application est en cours de développement, j'espère donc que d'autres personnes commenteront cette solution.

0
vangoz