代码之家  ›  专栏  ›  技术社区  ›  Ayaz Alavi

基于iphone应用xml的主题

  •  0
  • Ayaz Alavi  · 技术社区  · 14 年前

    我正在为我的应用程序创建基于xml的主题,它将存储在我的应用程序的主题文件夹中。我需要遍历该文件和应用的主题,即设置导航栏样式,标签栏样式,字体等。什么可能是最好的解决方案,这样做呢?我有大约7-8个viewcontrollers,需要在应用程序启动或viewdidload方法中应用该主题。任何建议都很好。

    我已经创建了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>
    

    parsexml 并且将有4个子节点,每个节点本身就是一个NSMUtableDictionary。所以,如果我想访问backgroundimage节点,那么下面的代码将得到它的值

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

    解析xml的最佳解决方案是什么?xml包含每个屏幕的样式,就像我为navigationbar显示的样式一样?

    1 回复  |  直到 14 年前
        1
  •  2
  •   thierryb    14 年前

    我创建了一个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"]]];
    

    希望这有帮助。

    蒂埃里