1

J'essaie d'utiliser UIAppearance pour configurer le style de mes applications. Il fonctionne parfaitement avec les composants UI comme UIView ou UIButton, mais pas avec UIViewControllers. Je voudrais faire quelque chose comme:Comment définir backgroundColor d'un ViewController avec UIAppearance

let appearance = FirstViewController.appearance() 

Y at-il un moyen d'utiliser UIAppearance avec ViewControllers?

+0

vous pouvez avoir besoin de voir la vue du contrôleur, juste une supposition. –

+0

'UIViewController' n'a pas de 'appearnace()' –

+0

UIViewcontroller n'élargit pas la classe UIAppearnce de façon à ce que vous ne puissiez pas l'utiliser. UIView étend la classe UIAppearnce. – Hiren

Répondre

2

Vous ne définissez pas la couleur de fond dans un viewController vous le définissez sur le viewControllersview. Si vous utilisez UIView.appearance().backgroundColor vous allez changer le fond de toutes les vues.

Donc, la réponse à votre question est non, vous ne pouvez pas utiliser UIAppearance pour changer la couleur de fond viewControllers.

Ce que vous pouvez faire est la suivante:

class FirstViewController: UIViewController { 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     view.backgroundColor = .red 
    } 
} 

Ensuite, utilisez l'inspecteur dans votre Storyboard changer UIViewController-FirstViewController.

+2

Cela n'affectera-t-il PAS TOUTES les vues, pas seulement les vues du contrôleur? – rmaddy

+0

@rmaddy, je n'étais pas assez clair, pensais que c'était évident mais a clarifié la réponse maintenant. Merci de l'avoir signalé. –

+0

@rmaddy Ceci n'affecte que les contrôleurs de vue qui, dans l'inspecteur de Storyboard, ont leur classe assignée à FirstViewController ou à la sous-classe de FirstViewController. L'une des utilisations est d'étendre la valeur par défaut 'UINavigationController' et de définir l'arrière-plan en blanc. Le coin supérieur droit n'affiche donc pas un éclair de couleur gris foncé. –

2

Comme vous pouvez le voir dans le documentation du protocole UIAppearance, que deux classes adopter par défaut, UIView et UIBarItem, d'où la classe UIViewController n'a pas de fonction appearance().

Vous pouvez étendre UIViewController en appliquant les méthodes du protocole, ou probablement une solution encore plus facile serait de créer votre propre UIViewController sous-classe, qui fournit une couleur par défaut pour les classes view.backgroundColor de propriété et de faire toutes vos ViewControllers nécessaires hériteront de cette classe au lieu de UIViewController directement.