2009-10-02 3 views
2

Я ищу чистый способ определения глобальных стилей для приложения, шрифтов, цветов и т. Д. У меня есть статическая библиотека для включения в другие приложения, каждая приложение имеет свои собственные стили, границы, заливки, фоны.Настройки стилей iPhone для статической библиотеки/рамки

Как я могу с помощью какао включить систему, чтобы установить определенные стили для этой библиотеки. Я посмотрел на библиотеку Три202 Джо Хьюитта http://github.com/joehewitt/three20 (смотри на TTStyleSheet.h и реализацию), здесь он делает то, о чем я думаю, но это кажется слишком сложным.

Удивите, если у кого-то есть лучшая система .. с помощью глобального делегата?

ответ

1

Три20 отлично работает для меня на самом деле. Вы можете просто подкласса TTStyle и переопределить его метод (или что-то подобное). Затем подкласс TTDefaultStyleSheet и используйте [TTStyleSheet setGlobalStyleSheet:].

1

На самом деле мне было легче, если бы я подумал, что это класс, который я создал для этого, основываясь на идее стилей стилей от Three20 без накладных расходов.

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 

Использование очень легко ..

#import GNStyle.h 


UIColor *colorOne = GNSTYLE(colorOne); 
UIColor *normalColor = GNSTYLESTATE(stateColor:, UIControlStateNormal); 
UIColor *highlightColor = GNSTYLESTATE(stateColor:, UIControlStateHighlighted); 

Я предполагаю, что ар esome изменения, которые могли бы быть готовым сделать этот бетт Если вы это используете и обновите, вы можете связаться со мной.

С благодарностью

Смежные вопросы