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?

+2


source to share


2 answers


Three20 works great for me actually. You can just subclass TTStyle

and override its method drawStyle

(or something similar). Then subclass TTDefaultStyleSheet

and use [TTStyleSheet setGlobalStyleSheet:]

.



+1


source


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

+1


source







All Articles