2010-06-02 95 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

相關問題