2012-01-11 97 views
6

我知道類似的問題已經被問到,但沒有得到滿意的答案。所以我再次加入這個問題。如何創建一個基於主題的應用程序?

根據iphone應用程序中的用戶選擇,我需要改變應用程序的外觀和感覺(彩色字體背景圖像等)。是否有任何標準的方法來實現這一目標?

一個可能的解決方案可以是複製每個主題的xib文件並根據選擇加載它。這是一個好方法嗎?主要是因爲連接xib副本的出口和動作聽起來是一項多餘的任務。

我希望看到有關此疑問的專家建議。 感謝您提前提供任何幫助。

-mia

回答

0

對於非XIB路線

顏色:iOS 5的公開全新亮相的API。如果設置tintColor或backgroundColor,大多數UI元素都有選項。很少,甚至是背景圖像。

字體:總是能夠改變,但是你不能對它進行動畫處理。

背景圖像:您的主UIView應該有背景圖像的選項,或者如果失敗,則使用圖案圖像的背景顏色。

+0

這只是根據選擇動態設置顏色。這很好,但我正在尋找一個有效的選項,如主題或樣式,我可以簡單地動態切換主題,同時我不必顯式處理代碼或重複的筆尖。 – mia 2012-01-12 04:50:55

+0

[UIButton setTintColor:[UIColor someColor]];你必須自己處理所有事情。在你稱之爲每個'新風格'的時候,用一些預設的顏色值做一些方法 – CodaFi 2012-01-12 04:52:20

0

實現基於主題的應用程序IOS應用程序(不使用〜xib路徑)的最佳方法。你應該創建一個build.xml文件,它將包含所有主題。你應該保持你的佈局相同,你可以根據用戶的喜好在佈局中改變圖像,風格,字體,語言,視圖。通過這樣做,您不會複製任何代碼,並且您將從應用程序中獲得最佳性能。

+0

抱歉,我不明白你的解釋。你能否再解釋一下。這也不是動態的rt?意味着程序啓動並運行時用戶不能切換主題。 – mia 2012-01-12 04:52:39

0

正如CodaFI所說,如果您使用的是iOS 5或更高版本,則您已具備主題功能。它的工作原理是這樣的:

  • 將協議<IAppearanceContainer>添加到類中。

  • UI_APPEARANCE_SELECTOR裝修您打算更改的房產。例如:

     
    @interface UINavigationBar : ... <IAppearanceContainer> 
    @property(nonatomic,retain) UIColor *tintColor UI_APPEARANCE_SELECTOR; 
    @end 
    

  • 改變顏色的類的所有實例:
     
    [[UINavigationBar appearance] setTintColor:[UIColor redColor]]; 
    

上面的例子是UINavigationBar,但它會與任何自定義類的工作。要看到的iOS 6.1已經支持的對象,查看文檔或者運行以下命令:

cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/System/Library/Frameworks/UIKit.framework/Headers 

grep -H UI_APPEARANCE_SELECTOR ./* | sed 's/ __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0) UI_APPEARANCE_SELECTOR;//' 

讓你想模塊化主題說:

  • 寫的所有字體的大plist文件,顏色,音樂,還有什麼不是。這些文件中的每一個都將是一個主題。
  • 通過單例讀取文件,併爲每個可設置主題的元素設置線條,如[x appearance] setWhatever:<plist value>]
  • 如果您有相同元素的實例需要顯示不同的元素,請通過單例獲取這些圖像。

這或多或少是來自Amit Vyawahare的小費。我說plist代替了xml,因爲它們更易於閱讀。除非你確實需要,否則不要複製NIB。

相關問題