2016-08-25 1 views
0

私は複数の顧客向けにネイティブiOSアプリケーションを開発していますが、私たちはそれぞれの異なる顧客に複数のターゲットを使用しています。ほとんどすべてのストーリーボードは、アプリが各顧客にほぼ同じであるため再利用されます。さまざまなストーリーボードスタイルの複数のiOSターゲット

問題は、各顧客の色とイメージでストーリーボードをカスタマイズする必要があり、ストーリーボードを複製したくないということです。だから、私はHTMLの中のCSSのようなものを探しています。あるいは、AndroidのStylesのように、iOSに当てはまるものがあります。

私はそれをどのように行うことができますか?

答えて

1

スウィフトコードまたはJSONスタイルシートのいずれかを使用して、CSSと同様の方法でストーリーボードをスタイルできるライブラリを作成しました。

他のコードを変更することなく、info.plistにターゲットごとに異なるスタイルシートを設定できます。

詳細情報へのリンクhere

0

これを達成する方法はいくつもあります。ここに私の考えがあります。

スタイルと呼ばれるNSObjectを作成します。変更が必要なすべての情報が保持されます。たとえば、あなたが4つのビューコントローラ、それぞれ異なる背景色、およびそれらの2の異なる画像ごとに異なるタイトルを必要とするのであれば、それは次のようになります。

その後
#import <Foundation/Foundation.h> 
#import <UIKit/UIKit.h> 

@interface Style : NSObject 

@property (nonatomic, retain) NSString* first_title;    
@property (nonatomic, retain) NSString* second_title; 
@property (nonatomic, retain) NSString* third_title; 
@property (nonatomic, retain) NSString* fourth_title; 
@property (nonatomic) UIColor* first_background_color; 
@property (nonatomic) UIColor* second_background_color; 
@property (nonatomic) UIColor* third_background_color; 
@property (nonatomic) UIColor* fourth_background_color; 
@property (nonatomic) UIImage* first_image; 
@property (nonatomic) UIImage* second_image; 

@end 

、あなたのスタイルに.Mは、あなたがメモリにこの情報を保存するためのメソッドを持つことができ、このように:

// encode a card to memory 
- (void)encodeWithCoder:(NSCoder *)coder { 
    [coder encodeObject:first_title forKey:@"first_title"]; 
    // etc etc etc 
} 

// decode a card from memory 
- (id)initWithCoder:(NSCoder *)coder { 
    self = [self init]; 
    self.first_title = [coder decodeObjectForKey:@"first_title"]; 
    // etc etc etc 
    return self; 
} 

次に、あなたは(あなたが好きな場所アプリのデリゲートにまたは基本的には)スタイルのNSArrayの*を作成することができます - のそれぞれに1つずつ関係会社。私はこれを行う場所をいくつでも考えることができます - あなたはdidFinishLaunchingWithOptionsのアプリケーションデリゲートでそれを行うことができます。または、サーバーにいくつかのTSVファイルを保存し、viewDidLoadでそれらをフェッチし、それらをこの配列に解析することもできます。あなたが望むものなら、なんでも!各企業の1 - - あなたはいくつかの素晴らしいスタイルの配列を持っていたらとにかく、あなたはフェッチとすると、このようなアプリのメモリからそれを保存することができます:

-(void)writeArrayWithCustomObjToUserDefaults:(NSString*)keyName withArray:(NSMutableArray*)myArray { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:myArray]; 
    [defaults setObject:data forKey:keyName]; 
    [defaults synchronize]; 
} 

とメモリから戻って配列を取得するには:

if ([[NSUserDefaults standardUserDefaults] objectForKey:@"Styles"] != nil) { 
     NSData* existingData = [[NSUserDefaults standardUserDefaults] objectForKey:@"knives"]; 
     NSArray* styles = [NSKeyedUnarchiver unarchiveObjectWithData:existingData]; 

} 

次に、さまざまなVCで、スタイルのNSArrayをフェッチし、ターゲットに対応する名前のものを探し、その変数にアクセスしてVCを変更します。

More information on getting target name here.

More information on that memory stuff here.

関連する問題