2010-06-02 7 views
0

Je crée un thème pour mon application qui est basé sur xml et sera stocké dans un dossier de thèmes de mon application. J'ai besoin de parcourir ce fichier et d'appliquer le thème, c'est-à-dire définir les styles de barre de navigation, les styles de tabulation, les polices, etc. Quelle pourrait être la meilleure solution possible pour cela? J'ai environ 7-8 viewcontrollers qui doit être appliqué ce thème sur le lancement de l'application ou la méthode viewdidload. Toute suggestion serait géniale.iphone app xml basé sur le thème

J'ai créé un analyseur xml qui convertit n'importe quel xml en NSMutableDictionary. Chaque noeud est identifié en suivant la classe

@interface xmlObject : NSObject { 
NSString *innerText; 
NSMutableDictionary *children; 
NSString *NodeName; 
NSDictionary *attributes; 
} 

si xml avec la structure

<navigationbar> 
    <backgroundcolor> <!-- rgb with values between 0-1 --> 
    <red>0.8</red> 
    <green>1.0</green> 
    <blue>0.5</blue> 
    <alpha>0.8</alpha> 
    </backgroundcolor> 
    <tintcolor> <!-- rgb with values between 0-1 --> 
    <red>0.8</red> 
    <green>1.0</green> 
    <blue>0.5</blue> 
    <alpha>0.8</alpha> 
    </tintcolor> 
    <backgroundimage></backgroundimage> <!-- png 320 * 44 --> 
    <color> <!-- rgb with values between 0-1 --> 
    <red>0.8</red> 
    <green>1.0</green> 
    <blue>0.5</blue> 
    <alpha>0.8</alpha> 
    </color> 
    </navigationbar> 

aura la barre de navigation comme une clé de l'objet NMUTAble dictionnaire retourné par la méthode XMLObject dire parsexml et aura 4 enfants noeuds se chaque un NSMUtableDictionary. Donc, si je veux accéder noeud backgroundImage puis le code suivant obtenir sa valeur

[[[[tmp objectForKey:@"navigationbar"] objectForKey:@"children"] objectForKey:@"backgroundimage"] objectForKey:@"innertext"] 

// où tmp est le NSMutableDictionary retourné byxml méthode d'instance obj. Quelle pourrait être la meilleure solution possible pour analyser XML qui contient du style pour chaque écran comme celui que j'ai montré pour la barre de navigation?

Répondre

2

J'ai fait quelque chose de similaire. J'ai créé un wich objet ThemeManager gère le chargement d'un flie plist contenant des données comme celles-ci:

<key>MainWindow</key> 
<dict> 
<key>BackgroundImage</key> 
<string>background.jpg</string> 
<key>TextColor</key> 
<string>1,1,1,1</string>    
</dict> 
... 

Alors est votre application, vous avez juste pour obtenir la valeur en utilisant KVC. Par exemple, je charge l'image puis l'affiche dans nackground.

backgoundImage.image = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@", self.appDelegate.themesManager.assetsPathDocumentsFolder, [self.appDelegate.themesManager getElementValueAtKeyPath:@"MainWindow.BackgroundImage"]]]; 

Espérons que cela aide.

Thierry

+1

Merci pour la réponse. J'essaie d'éviter le plist puisque je suis déjà en train d'analyser XML à NSMutableDictionary. Quel pourrait être le design d'une telle application. Dois-je créer des méthodes drawrect de la barre de navigation, et la barre d'outils et la barre d'onglets et appliquer le thème là ou dois-je le faire sur la méthode viewdidload. J'ai tout le style dans un NSMutableDictionary. –

Questions connexes