A SDK that provides an interface to theme iOS application with responsiveness between different themes.
To use the SDK the following requirements must be met:
- Xcode 11.0 or newer
- Swift 4.0 or newer (preinstalled with Xcode)
- Deployment target SDK for the app: iOS 12.0 or later
CocoaPods is a dependency manager, which automates and simplifies the process of using 3rd-party libraries in your projects. You can install it with the following command:
$ gem install cocoapods
To integrate goSellSDK into your Xcode project using CocoaPods, specify it in your Podfile
:
platform :ios, '12.0'
use_frameworks!
source 'https://github.com/CocoaPods/Specs.git'
target 'MyApp' do
pod 'TapThemeManager2020'
end
Then, run the following command:
$ pod update
First of all, TapThememanager
should be set up by providing the theme itself. This can be provided as Plist or JSON file(s) or a given Theme Dictionary.
Below the different ways you can attach a certain theme file to the shared ThemeManager and how to change the theme at run time.
Make sure the JSON file in the main bundle of your project.
Swift:
TapThemeManager.setTapTheme(jsonName: "MyThemeFile")
Objective-C:
[TapThemeManager setTapThemeWithJsonName:@"MyThemeFile"];
Make sure the PLIST file in the main bundle of your project.
Swift:
TapThemeManager.setTapTheme(plistName: "MyThemeFile")
Objective-C:
[TapThemeManager setTapThemeWithPlistName:@"MyThemeFile"];
Swift:
TapThemeManager.setTapTheme(themeDict: ["MyLabelFontSize":22])
Objective-C:
[TapThemeManager setTapThemeWithThemeDict:@{@"MyLabelFontSize":@(22)}];
Don't forget to import the framework at the beginning of the file:
Swift:
import TapThemeManager2020
Objective-C:
@import TapThemeManager2020;
or
#import <TapThemeManager2020/TapThemeManager2020.h>
As stated in Setup, the SDK requires a Theme (file or object) and the SDK does the magic for matching the values in the given Theme to the UI attributes for the UIKit subclasses.Here we will state the rane of acceptable values in the Theme (file or object.)
Type | Usage | Accepted Formats | Examples |
---|---|---|---|
Hex Color | When you need to change an attribute that accepts UIColor or CGColor like UIView.backgroundColor or UIBar.barTintColor | 3, 4, 6, 8 Hex color codes | "#RGB", "#RGBA", "#RRGGBB", "#RRGGBBAA" |
Number | When you need to change an attribute that accepts CGFloat or Double, like UIView.alpha or UIVIew.layer.borderWidth | +ve floats | 0, 0.3, 5, 10.2 |
Font | When you need to change an attribute that accepts UIFont, like UILabel.font | "Font FamilyName, Size" or "Size" | "FontFamilyName,23" -> Creates a font using the given font name and size, "23" -> Creates a font using the default fonr and the given size |
UIBarStyle | When you need to change an attribute that accepts UIBarStyle, like UIBarStyle.barStyle | "default","black","blackTranslucent" | |
UIImage | When you need to change an attribute that accepts UIImage, like UIImageView.image | String represents the image name you want to apply | "MyImage" |
Keyboard Appearance | When you need to change an attribute that accepts UIKeyboardAppearance | "default","dark","light","alert" | |
Navigation Bar Appearance | When you need to change an attribute that accepts UINavigationBarAppearance. Requires iOS 13+ | Title Text Attributes Large Text Attributes Compact Appearance |
|
Scroll View Indicator | When you need to change an attribute that accepts UIScrollView.IndicatorStyle. | "default" "black" "white" |
|
Status Bar Style | When you need to change an attribute that accepts UIStatusBarStyle | "default" "lightcontent" "darkcontent" Requires iOS 13+ |
|
Vibrance Blur | When you need to change an attribute that accepts UIVisualEffect | "dark" "light" "extralight" "prominent" Requires iOS 10+ "regular" Requires iOS 10+ |
|
String Attributes | When you need to change an attribute that accepts NSAttributedString | A dictionary that has the needed attributes using the values given previously Font, Color, etc. |
The SDK provides interfaces for various subclasses of the UIKit to easily apply the theme value from the theme provided to the corresponding attribute in the UIKit subclass. Provided below some of the attributes the SDK supports for different UIViews. To know what attributes the sdk supports, for any UIView just type .tap_theme and all avaliable methods will show
SDK usage | UIKit Selector applied | Accepted Theme Value | Example Theme Value |
---|---|---|---|
UIView.tap_theme_alpha | setAlpha: | Float | 0.4 |
UIView.tap_theme_backgroundColor | setBackgroundColor: | Hex color | "#FF00FF" |
UIView.tap_theme_tintColor | setAlpha: | Hex color | "#FF00FF" |
SDK usage | UIKit Selector applied | Accepted Theme Value | Example Theme Value |
---|---|---|---|
UIApplication.tap_theme_setStatusBarStyle | setStatusBarStyle:animated: | Status Bar Style | "default" |
SDK usage | UIKit Selector applied | Accepted Theme Value | Example Theme Value |
---|---|---|---|
UIBarItem.tap_theme_image | setImage: | UIImage | "MyImageName" |
UIBarItem.tap_theme_setTitleTextAttributes | setTitleTextAttributes:forState: | String Attributes | "NavigationTitle": { |
SDK usage | UIKit Selector applied | Accepted Theme Value | Example Theme Value |
---|---|---|---|
UIBarButtonItem.tap_theme_tintColor | setTintColor: | Hex color | "#FF00FF" |
SDK usage | UIKit Selector applied | Accepted Theme Value | Example Theme Value |
---|---|---|---|
UILabel.tap_theme_font | setFont: | Font | "MyFontName,24" |
UILabel.tap_theme_textColor | setTextColor: | Hex color | "#FF00FF" |
UILabel.tap_theme_highlightedTextColor | setTextColor: | Hex color | "#FF00FF" |
UILabel.tap_theme_shadowColor | setShadowColor: | Hex color | "#FF00FF" |
UILabel.tap_theme_textAttributes | setTitleTextAttributes:forState: | String Attributes | "NavigationTitle": { |
SDK usage | UIKit Selector applied | Accepted Theme Value | Example Theme Value |
---|---|---|---|
UINavigationBar.tap_theme_barStyle | setBarStyle: | Bar Style | "default" |
UINavigationBar.tap_theme_barTintColor | setBarTintColor: | Hex color | "#FF00FF" |
UINavigationBar.tap_theme_titleTextAttributes | setTitleTextAttributes: | String Attributes | "NavigationTitle": { |
UINavigationBar.tap_theme_largeTitleTextAttributes | setTitleTextAttributes: | String Attributes | "NavigationTitle": { |
SDK usage | UIKit Selector applied | Accepted Theme Value | Example Theme Value |
---|---|---|---|
UITabBar.tap_theme_barStyle | setBarStyle: | Bar Style | "default" |
UITabBar.tap_theme_unselectedItemTintColor | setUnselectedItemTintColor: | Hex color | "#FF00FF" |
UITabBar.tap_theme_barTintColor | setBarTintColor: | Hex color | "#FF00FF" |
SDK usage | UIKit Selector applied | Accepted Theme Value | Example Theme Value |
---|---|---|---|
UITabBarItem.tap_theme_selectedImage | setSelectedImage: | UIImage | "MyImage" |
SDK usage | UIKit Selector applied | Accepted Theme Value | Example Theme Value |
---|---|---|---|
UITableView.tap_theme_separatorColor | setSeparatorColor: | Hex color | "#FF00FF" |
UITableView.tap_theme_sectionIndexColor | setSectionIndexColor: | Hex color | "#FF00FF" |
UITableView.tap_theme_sectionIndexBackgroundColor | setSectionIndexBackgroundColor: | Hex color | "#FF00FF" |
SDK usage | UIKit Selector applied | Accepted Theme Value | Example Theme Value |
---|---|---|---|
UITextField.tap_theme_font | setFont: | UIFont | "MyFont,22" |
UITextField.tap_theme_keyboardAppearance | setKeyboardAppearance: | Keyboard Appearance | "default" |
UITextField.tap_theme_textColor | setTextColor: | Hex color | "#FF00FF" |
UITextField.tap_theme_placeholderAttributes | tap_setPlaceholderAttributesSelector: | String Attributes | "NavigationTitle": { |
SDK usage | UIKit Selector applied | Accepted Theme Value | Example Theme Value |
---|---|---|---|
UITextView.tap_theme_font | setFont: | UIFont | "MyFont,22" |
UITextView.tap_theme_keyboardAppearance | setKeyboardAppearance: | Keyboard Appearance | "default" |
UITextView.tap_theme_textColor | setTextColor: | Hex color | "#FF00FF" |
We provide here a sample theme file and how to access different vales in it and match it with the corrent UIView.
{
"CustomButton": {
"buttonTitleColorHighlighted": "#555",
"buttonTitleColorNormal": "#FFFFFF",
"buttonBackgroundColor": "#ABA6BF"
},
"CustomView1": {
"backgroundColor": "#36688D",
"borderColor": "#F3CD05",
"cornerRadius":4,
"borderWidth": 2
},
"CustomLabel1": {
"textColor": "#F3CD05",
"font":"24"
},
"CustomView2": {
"backgroundColor": "#F49F05",
"borderColor": "#F18904",
"cornerRadius":10,
"borderWidth": 1
},
"CustomLabel2": {
"textColor": "#F18904",
"font":"24"
},
"CustomSwitch2": {
"onTint": "#F18904",
"thumbTint":"#36688D"
},
"CustomView3": {
"backgroundColor": "#BDA589",
},
"CustomLabel3": {
"textColor": "#FFFFFF",
"font":"24"
},
"CustomUIImageView3": {
"image": "icon_theme_1"
},
"Global": {
"UIStatusBarStyle": "LightContent",
"NavigationTint": "#FF0000",
"NavigationTitle": {
"NavigationTitleColor": "#FFFFFF",
"Font":"24"
}
}
}
// Apply background color for UIView
customView1.tap_theme_backgroundColor = "CustomView1.backgroundColor"
// Apply border color for UIView
customView1.layer.tap_theme_borderColor = "CustomView1.borderColor"
// Apply text color for UILabel
customLabel1.tap_theme_textColor = "CustomLabel1.textColor"
// Apply title color for UIButton in normal state
customButton.tap_theme_setTitleColor(selector: "CustomButton.buttonTitleColorNormal", forState: .normal)
// Apply text attributes
// 1- Fetch the main directory that has the attributes
self.navigationBar.tap_theme_titleTextAttributes = ThemeStringAttributesSelector(keyPath: "Global.NavigationTitle", map: { (entry) -> [NSAttributedString.Key : Any]? in
// 2- Returns an array of all needed attributes
return [NSAttributedString.Key.foregroundColor:TapThemeManager.colorValue(for: "Global.NavigationTitle.NavigationTitleColor")!,
NSAttributedString.Key.font:TapThemeManager.fontValue(for: "Global.NavigationTitle.Font")!]
})
// Apply background color for UIView
_CustomView1.tap_theme_backgroundColor = [ThemeUIColorSelector selectorWithKeyPath:@"CustomView1.backgroundColor"];
// Apply border color for UIView
_CustomView1.layer.tap_theme_borderColor = [ThemeCgColorSelector selectorWithKeyPath:@"CustomView1.borderColor"];
// Apply text color for UILabel
_customLabel1.tap_theme_textColor = [ThemeUIColorSelector selectorWithKeyPath:@"CustomLabel1.textColor"];
// Apply title color for UIButton in normal state
[_customButton tap_theme_setTitleColorWithSelector:[ThemeUIColorSelector selectorWithKeyPath:@"CustomButton.buttonTitleColorNormal"] forState:UIControlStateNormal];
// Apply text attributes
// 1- Fetch the main directory that has the attributes
self.navigationBar.tap_theme_titleTextAttributes = [ThemeStringAttributesSelector selectorWithKeyPath:@"Global.NavigationTitle" map:^NSDictionary<NSAttributedStringKey,id> * _Nullable(id entry) {
// 2- Returns an array of all needed attributes
NSMutableDictionary *attributesDictionary = [NSMutableDictionary dictionary];
[attributesDictionary setObject:[TapThemeManager fontValueFor:@"Global.NavigationTitle.Font"] forKey:NSFontAttributeName];
[attributesDictionary setObject:[TapThemeManager colorValueFor:@"Global.NavigationTitle.NavigationTitleColor"] forKey:NSForegroundColorAttributeName];
return attributesDictionary;
}];
}