2012-04-18 22 views
0

iPhoneアプリケーションユーザーがカスタムフォントを設定してアプリケーションをパーソナライズできるようにしようとしています。 NSUserDefaultsにUIFontオブジェクトを保存できるかどうか疑問に思っています。フォントとフォントサイズを設定してオブジェクトを保存するほうがずっと簡単になります。コードサンプルも素晴らしいでしょう。UIFontオブジェクトをNSUserDefaultsに保存することができます

答えて

3

私は複雑さを隠すために、カテゴリになるだろう - あなたは

// NSUserDefaults+CustomFontAdditions.h 

@interface NSUserDefaults (CustomFontAdditions) 

- (UIFont *)ps_fontForKey:(NSString *)fontKey; 
- (void)ps_setFont:(UIFont *)font forKey:(NSString *)fontKey; 

@end 

.M

// NSUserDefaults+CustomFontAdditions.m 

#import "NSUserDefaults+CustomFontAdditions.h" 

NSString * const PSCustomFontsKey  = @"PSCustomFontsKey"; 
NSString * const PSCustomFontKeyFontName = @"PSCustomFontKeyFontName"; 
NSString * const PSCustomFontKeyFontSize = @"PSCustomFontKeyFontSize"; 

@implementation NSUserDefaults (CustomFontAdditions) 

- (UIFont *)ps_fontForKey:(NSString *)fontKey; 
{ 
    NSDictionary *fonts = [self dictionaryForKey:PSCustomFontsKey]; 

    UIFont *font = nil; 

    if (fonts) { 
     NSDictionary *fontComponents = [fonts valueForKey:fontKey]; 

     NSString *fontName = [fontComponents valueForKey:PSCustomFontKeyFontName]; 
     CGFloat size  = [[fontComponents valueForKey:PSCustomFontKeyFontSize] floatValue]; 

     font = [UIFont fontWithName:fontName size:size]; 
    } 

    return font; 
} 

- (void)ps_setFont:(UIFont *)font forKey:(NSString *)fontKey; 
{ 
    NSMutableDictionary *fonts = [[self dictionaryForKey:PSCustomFontsKey] mutableCopy]; 

    if (!fonts) { 
     fonts = [[NSMutableDictionary alloc] initWithCapacity:1]; 
    } 

    NSDictionary *fontComponents = [[NSDictionary alloc] initWithObjectsAndKeys: 
            font.fontName, PSCustomFontKeyFontName, 
            [NSNumber numberWithFloat:font.pointSize], PSCustomFontKeyFontSize, nil]; 

    [fonts setValue:fontComponents forKey:fontKey]; 

    [self setObject:fonts forKey:PSCustomFontsKey]; 
} 

@end 

使い方が

のようになります.Hこの

ようなもので開始される可能性があります

NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; 
[standardUserDefaults ps_setFont:[UIFont systemFontOfSize:12.0f] forKey:@"font1"]; 
[standardUserDefaults ps_setFont:[UIFont fontWithName:@"Helvetica Neue" size:24.0f] forKey:@"font2"]; 
[standardUserDefaults synchronize]; 

NSLog(@"%@", [standardUserDefaults ps_fontForKey:@"font1"]); 
NSLog(@"%@", [standardUserDefaults ps_fontForKey:@"font2"]); 

出力:

#=> 2012-04-19 00:01:21.756 ma[1340:f803] <UICFFont: 0x68a18b0> font-family: "Helvetica"; font-weight: normal; font-style: normal; font-size: 12px 
#=> 2012-04-19 00:01:21.765 ma[1340:f803] <UICFFont: 0x6b99670> font-family: "Helvetica Neue"; font-weight: normal; font-style: normal; font-size: 24px 
+0

ポール...私はあなたのソリューションを実装し、それは魅力的に機能します。詳細なコードサンプルを理解してください – 239revilo

2

これらはNSUserDefaultsに保存することができるアイテムです。

たNSData、NSStringの、のNSNumber、NSDate、NSArrayの、またはNSDictionaryの

あなたはこのような何かを行うことができます:

NSDictionary *fontInformation = [NSDictionary dictionaryWithObjectsAndKeys: 
@"YOUR_FONTS_NAME", "fontName", 
[NSNumber numberWithInt:14], @"fontSize", nil]; 

[[NSUserDefaults standardUserDefaults] setObject:fontInformation forKey:@"fontInfo"]; 

その後、NSUserDefaultsからNSDictionaryを取得し、UIFontを再作成することができます。

関連する問題