具有不同故事板样式的多个 iOS 个目标
Multiple iOS targets with varying storyboard styles
我正在为多个客户开发本机 iOS 应用程序,我们为每个不同的客户使用多个目标。几乎所有故事板都将被重复使用,因为每个客户的应用程序几乎相同。
问题是,我们需要使用每个客户的颜色和图像自定义故事板,我们不想复制故事板。所以我正在搜索 HTML 中的 CSS 或 Android 中的样式以应用于 iOS.
我该怎么做?
我创建了一个库,可以让您以类似于 CSS 的方式设置故事板的样式,但使用 Swift 代码或 JSON 样式表。
您可以在 info.plist
中为每个目标设置不同的样式表,而无需更改任何其他代码。
Link 获取更多信息 here。
有多种方法可以实现这一点。这是我的想法。
创建一个名为 Style 的 NSObject。它将保存您需要更改的所有信息。因此,例如,如果您需要为四个视图控制器中的每一个设置不同的标题,每个视图控制器都需要不同的背景颜色,并且其中两个需要不同的图像,它可能看起来像这样:
#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
然后,在您的 Style.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* 样式 - 每个涉及的公司一个。我可以想到很多地方可以做到这一点 - 你可以在 didFinishLaunchingWithOptions
中的应用程序委托中做到这一点,或者你甚至可以在服务器上存储一些 TSV 文件,在 viewDidLoad 中获取它们并将它们解析到这个数组中.任何你想要的!无论如何,一旦你有了一些很棒的样式数组——每个公司一个——你就可以像这样在应用程序内存中获取和保存它:
-(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!
我正在为多个客户开发本机 iOS 应用程序,我们为每个不同的客户使用多个目标。几乎所有故事板都将被重复使用,因为每个客户的应用程序几乎相同。
问题是,我们需要使用每个客户的颜色和图像自定义故事板,我们不想复制故事板。所以我正在搜索 HTML 中的 CSS 或 Android 中的样式以应用于 iOS.
我该怎么做?
我创建了一个库,可以让您以类似于 CSS 的方式设置故事板的样式,但使用 Swift 代码或 JSON 样式表。
您可以在 info.plist
中为每个目标设置不同的样式表,而无需更改任何其他代码。
Link 获取更多信息 here。
有多种方法可以实现这一点。这是我的想法。
创建一个名为 Style 的 NSObject。它将保存您需要更改的所有信息。因此,例如,如果您需要为四个视图控制器中的每一个设置不同的标题,每个视图控制器都需要不同的背景颜色,并且其中两个需要不同的图像,它可能看起来像这样:
#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
然后,在您的 Style.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* 样式 - 每个涉及的公司一个。我可以想到很多地方可以做到这一点 - 你可以在 didFinishLaunchingWithOptions
中的应用程序委托中做到这一点,或者你甚至可以在服务器上存储一些 TSV 文件,在 viewDidLoad 中获取它们并将它们解析到这个数组中.任何你想要的!无论如何,一旦你有了一些很棒的样式数组——每个公司一个——你就可以像这样在应用程序内存中获取和保存它:
-(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!