2010-06-02 98 views
0

我正在为我的应用程序创建主题,这是基于xml的,并将存储在我的应用程序的主题文件夹中。我需要遍历该文件并应用主题,即设置导航栏样式,Tabbar样式,字体等。对此,最好的解决方案是什么?我有大约7-8个视图控制器需要在应用程序启动或viewdidload方法上应用该主题。任何建议都会很棒。iphone应用程序xml基于主题

我已经创建了xml解析器,它将任何xml转换为NSMutableDictionary。每个节点由以下类识别

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

所以XML与结构

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

将具有导航条通过的XmlObject方法返回NMUTAble字典对象的关键说parsexml和将具有4个子节点的每个本身一个NSMUtableDictionary。所以,如果我想访问和backgroundImage节点,则下面的代码得到其数值

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

//其中TMP是的NSMutableDictionary返回byxml OBJ实例方法。

什么可能是最好的解决方案来解析包含每个屏幕样式的XML,就像我在导航栏中显示的样式一样?

回答

2

我做了类似的事情。 我创建了一个ThemeManager对象至极处理包含这样的数据的plist flie加载:

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

然后是你的应用程序,你只需要使用KVC中获取价值。例如,我加载图像,然后在nackground中显示它。

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

希望这会有所帮助。

Thierry

+1

感谢您的回复。我试图避免plist,因为我已经解析xml到NSMutableDictionary。什么可能是这样的应用程序的设计。我应该创建导航栏,工具栏和tabbar的drawrect方法,并在那里应用主题,或者我应该在viewdidload方法上做。我得到了NSMutableDictionary中的所有样式。 – 2010-06-04 08:50:50

相关问题