IPhone Styles Settings for Static Library / Frame
I'm looking for a clean way to define global styles for an application, fonts, colors, etc. I have a static library that will be included in other applications, each application has its own styles, borders, fills, backgrounds.
How can I enable the system with cocoa so that I can set certain styles for this library. I looked at Joe Hewitt's Three20 library http://github.com/joehewitt/three20 (look at TTStyleSheet.h and the implementation), here it does what I think it does but it seems too complicated.
I wonder if anyone has a better system .. using a global delegate?
source to share
It was actually easier that I thought it was a class I created to do this, based on the "Style Sheets" idea from "Troika20" without the overhead.
GNStyle.h
/*
----------------------------------------------------------------------------------------------------
GNStyle.h
----------------------------------------------------------------------------------------------------
Created by Shane Saunders on 02/10/2009.
2009 GNative.
www.gnative.com
This is a condensed Style Sheet idea.
Its only in Beta form and might need some work.
Any upgrades please contact me with your changes
shane/gnative/com
Credit to Joe Hewitt for his idea from the Three20 library
----------------------------------------------------------------------------------------------------
*/
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
/*-----------------------------------------------------------------------------------------------------------------------
Style
-----------------------------------------------------------------------------------------------------------------------*/
#define GNSTYLE(_SELECTOR) [[GNStyle globalStyleSheet] styleWithSelector:@#_SELECTOR]
#define GNSTYLESTATE(_SELECTOR, _STATE) [[GNStyle globalStyleSheet] styleWithSelector:@#_SELECTOR forState:_STATE]
#define GNSTYLEVAR(_VARNAME) [GNSTYLESHEET _VARNAME]
#define GNSTYLESHEET ((id)[GNStyle globalStyleSheet])
@interface GNStyle : NSObject {
NSMutableDictionary* _styles;
}
+ (GNStyle*)globalStyleSheet;
+ (void)setGlobalStyleSheet:(GNStyle*)styleSheet;
- (id)styleWithSelector:(NSString*)selector;
- (id)styleWithSelector:(NSString*)selector forState:(UIControlState)state;
@end
/*
----------------------------------------------------------------------------------------------------
Default Style Sheet
----------------------------------------------------------------------------------------------------
*/
@interface GNDefaultStyle : GNStyle {
}
@end
GNStyle.m
/*
----------------------------------------------------------------------------------------------------
GNStyle.m
----------------------------------------------------------------------------------------------------
Created by Shane Saunders on 02/10/2009.
2009 GNative.
www.gnative.com
This is a condensed Style Sheet idea.
Its only in Beta form and might need some work.
Any upgrades please contact me with your changes
shane/gnative/com
Credit to Joe Hewitt for his idea from the Three20 library
----------------------------------------------------------------------------------------------------
*/
#import "GNStyle.h"
static GNStyle* gStyleSheet = nil;
@implementation GNStyle
+ (GNStyle*)globalStyleSheet {
if (!gStyleSheet) {
gStyleSheet = [[GNDefaultStyle alloc] init];
}
return gStyleSheet;
}
+ (void)setGlobalStyleSheet:(GNStyle*)styleSheet {
[gStyleSheet release];
gStyleSheet = [styleSheet retain];
}
/* ---------------------------------------------------------------------------------------------------- */
- (id)init {
if (self = [super init]) {
_styles = nil;
}
return self;
}
- (void)dealloc {
[super dealloc];
}
- (void)didReceiveMemoryWarning:(void*)object {
}
/* ---------------------------------------------------------------------------------------------------- */
- (id)styleWithSelector:(NSString*)selector {
return [self styleWithSelector:selector forState:UIControlStateNormal];
}
- (id)styleWithSelector:(NSString*)selector forState:(UIControlState)state {
NSString* key = state == UIControlStateNormal ? selector : [NSString stringWithFormat:@"%@%d", selector, state];
GNStyle* style = [_styles objectForKey:key];
if (!style) {
SEL sel = NSSelectorFromString(selector);
if ([self respondsToSelector:sel]) {
style = [self performSelector:sel withObject:(id)state];
if (style) {
if (!_styles) {
_styles = [[NSMutableDictionary alloc] init];
}
[_styles setObject:style forKey:key];
}
}
}
return style;
}
@end
/*
----------------------------------------------------------------------------------------------------
Default Style Sheet
----------------------------------------------------------------------------------------------------
*/
@implementation GNDefaultStyle
-(UIColor*)colorOne
{
return [UIColor redColor];
}
-(UIColor*)stateColor:(UIControlState)state
{
if (state == UIControlStateHighlighted)
return [UIColor yellowColor];
else
return [UIColor greenColor];
}
@end
The use is very simple.
#import GNStyle.h
UIColor *colorOne = GNSTYLE(colorOne);
UIColor *normalColor = GNSTYLESTATE(stateColor:, UIControlStateNormal);
UIColor *highlightColor = GNSTYLESTATE(stateColor:, UIControlStateHighlighted);
I think there are changes that can be made to make this better. If you use this and update you can contact me.
thank
source to share