Я пытаюсь разрешить пользователям приложений iPhone персонализировать приложение, установив пользовательские шрифты. Мне интересно, могу ли я сохранить объект UIFont для NSUserDefaults. Стало бы намного проще установить размер шрифта и шрифта, а затем сохранить объект. Образец кода тоже будет отличным.Может ли объект UIFont сохранять в NSUserDefaults
0
A
ответ
3
Я хотел бы сделать категорию, чтобы скрыть сложность - вы могли бы начать с чем-то вроде этого
.h
// 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
Использование будет выглядеть
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
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"];
Затем вы можете захватить NSDictionary из NSUserDefaults и повторно создать UIFont.
Смежные вопросы
- 1. NSUserDefaults не сохранять данные (Swift)
- 2. Должен ли я сохранять содержимое сборщика в NSUserDefaults?
- 3. Безопасна ли версия UIFont?
- 4. Должен ли я сохранять nsuserdefaults в свой пользовательский класс?
- 5. Как создать полужирный UIFont из обычного UIFont?
- 6. Объект из NSUserDefaults выпускает?
- 7. Почему NSUserDefaults не желает сохранять мой NSDictionary?
- 8. Может ли appcelerator использовать NSUserDefaults на iphone?
- 9. Может ли setNextEvent() сохранять переменные в prc?
- 10. Будет ли __bridge_transfer сохранять исходный объект?
- 11. Может ли кто-нибудь объяснить функцию списка поиска в NSUserDefaults?
- 12. Сохранять данные UITextField Programmatically
- 13. Может ли метод Stream.CopyTo() сохранять потоки незавершенными?
- 14. Может ли Windows Gadget сохранять данные?
- 15. Подкласс UIFont
- 16. NSUserDefaults не сохраняет полный объект
- 17. Может ли AutoMapper сохранять статические свойства?
- 18. Может ли openvswitch сохранять данные самостоятельно?
- 19. Невозможно декодировать объект из NSUserDefaults
- 20. изменить объект get from NSUserDefaults
- 21. Сохранение NSTimer в NSUserDefaults
- 22. Рисовать строковый объект с UIFont в пользовательском UIPrintPageRenderer
- 23. Расширение UIFont в SWIFT
- 24. Использование символа в UIFont
- 25. Как сохранить весь объект в NSUserDefaults
- 26. Сохранить пользовательский объект NSUserDefaults в Swift
- 27. UIFont проблема аварии
- 28. Проверьте, поддерживается ли определенный символ UIFont
- 29. Есть ли способ иметь штрих для UIFont
- 30. не может сохранять файлы через объект freamwork C# ASP.NET MVC
Спасибо, Пол ... Я реализовал ваше решение, и оно работает как шарм. оцените подробный пример кода – 239revilo