Come implementare un tema per View Controller in un'app iOS?

3

Ho un'applicazione, in cui dimensione carattere, tipo di carattere, colore, colore di sfondo, immagine e molte cose cambiano in base al tema.

Mi sono reso conto all'inizio che usare le enumerazioni per denotare i temi e quindi controllare il tema ovunque era un errore orribile.

Quindi ho due approcci ora e sono confuso con quale.

Mantieni un controller di visualizzazione di base per la mia app con aspetto e applicazione predefiniti, quindi crea una sottoclasse per tema.

o

Crea una classe tematica che fornisca informazioni tematiche e quindi la sottoclassi per tema e imposta l'oggetto tema sul controller di visualizzazione e l'oggetto tema di query prima di applicare il tema.

o

Potrebbe esserci un altro approccio a cui non ho pensato:)

    
posta Amogh Talpallikar 07.05.2013 - 14:30
fonte

1 risposta

4

Hai ragione a voler cambiare tecnica. Puoi immaginare tutto il lavoro che dovresti fare ogni volta che devi aggiungere un nuovo tema.

Vista sottoclasse / controller

Alcuni programmatori possono scegliere di sottoclasse il controllore della vista di base per prendere in considerazione più temi. Se gli adattamenti che devi applicare tra il tema e il tema sono radicalmente diversi, allora questo approccio va bene. Tuttavia, la maggior parte delle volte i temi condividono molte caratteristiche comuni e si potrebbe finire per dover cambiare molto poco tra di loro.

Tema sottoclasse

Il secondo approccio elimina questo problema avendo una classe "tema" condivisa che fa molto del lavoro comune tra i temi. Mantiene anche la tua classe di visualizzazione a scelta singola (e quindi più facile da leggere) e non deve preoccuparsi di piccole sfumature come i cambi di tema. Poiché questo approccio elimina tutti gli svantaggi del 1 ° approccio senza alcuno svantaggio aggiuntivo (a meno che "le classi in eccesso" siano qualcosa che consideri uno svantaggio), questo approccio è la migliore pratica in generale.

Fai il meglio che puoi per usare il principio del controllo inversione e chiedi al tuo view / controller di chiamare la classe del tema per svolgere compiti specifici del tema come disegnare un controllo, passando tutte le informazioni necessarie su detto controllo nel metodo. In questo modo, il tema è stateless e si mantiene il controllo nel controller senza dover sapere come funziona. Inoltre, è possibile avere un comportamento a tema di base nella classe del tema di base in modo che anche se non si esegue l'override del metodo, si è sicuri di vedere sempre qualcosa , anche se potrebbe non essere a tema.

Spero che questo aiuti.

    
risposta data 07.05.2013 - 15:01
fonte

Leggi altre domande sui tag