J'ai le morceau de code suivant que j'écris dans chaque UIViewController:

var navBar = self.navigationController?.navigationBar
    navBar?.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]

Je ne veux pas les écrire dans chaque UIViewController que je crée. Je suis paresseux et je ne veux pas me répéter. Je ne peux pas l'ajouter en extension. Alors, que puis-je faire pour ne pas avoir à écrire ce morceau de code lorsque je crée UIViewController?

0
therealManUtdFan 31 mai 2020 à 04:55

3 réponses

Une autre façon en dehors des protocoles consiste à créer une classe qui hérite de UIViewController, en implémentant votre setUpTitle dessus et sur tous les autres viewControllers au lieu d'hériter de UIViewController que vous utilisez cette superclasse que vous avez créée:

class TitleSetupController: UIViewController {
    func setupTitle() {
        var navBar = self.navigationController?.navigationBar
        navBar?.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
    }
}

class ViewController1: TitleSetupController {
    override func viewDidLoad() {
        setUpTitle()
    }
}

class ViewController2: TitleSetupController {
    override func viewDidLoad() {
        setUpTitle()
    }
}
0
Paulo Ricardo 31 mai 2020 à 04:30

Vous pouvez utiliser le protocole d'implémentation par défaut dans ce cas.

Créez un protocole d'implémentation par défaut:

import Foundation
import UIKit

protocol TitleSetupable: AnyObject {
    func setupTitle()
}

extension TitleSetupable where Self: UIViewController {
    func setupTitle() {
        var navBar = self.navigationController?.navigationBar
        navBar?.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
    }
}

Utilisez dans votre ViewController:

class YourViewController: UIViewController, TitleSetupable {
    override func viewDidLoad() {
        super.viewDidLoad()
        setupTitle()
    }
}
0
shingo.nakanishi 31 mai 2020 à 04:03

1.Utilisez un UIViewController de base tel que BaseViewController et placez ce code dans viewDidLoad et remplacez UIViewController par BaseViewController.

Il se peut que vous ne souhaitiez rien faire à UIViewController. Ensuite, vous pouvez rencontrer le terme AOP.Par exemple, Java utilise beaucoup AOP.

Vous pouvez utiliser le framework AOP comme Aspects.

0
Charlie Cai 31 mai 2020 à 09:39