Сохранить и загрузить цвет текста

Я искал, искал и искал это, и когда я, наконец, нашел что-то, это не сработало. Я пытаюсь сохранить и загрузить цвет текста, который выбирает пользователь. Вот моя кнопка сохранения:

-(IBAction)save123456 {
    NSData *colorData = [NSKeyedArchiver archivedDataWithRootObject:textview];
    [[NSUserDefaults standardUserDefaults] setObject:colorData forKey:@"myColor"];
}

И вот мой груз:

-(IBAction)load123456 {
    NSData  *colorData = [[NSUserDefaults standardUserDefaults] objectForKey:@"myColor"];
    UIColor *color = [NSKeyedUnarchiver unarchiveObjectWithData:colorData];
}

Мое текстовое представление - это текстовое представление, если это помогает. Также я связываю все через tuchupinside, поэтому дайте мне знать, если я должен что-то изменить.

Кроме того, если кто-нибудь знает, как сохранить текстовый шрифт, который выбирает пользователь, это также будет полезно. Большое спасибо!!


person Nicholas    schedule 05.07.2012    source источник


Ответы (1)


Ну, вы можете сохранить RGB цвета. И имя шрифта шрифта. Поэтому, когда вы сохраняете, сохраните эти значения для шрифта: font.fontName, font.pointSize и RGB цвета. Здесь вы можете увидеть, как получить RGB объекта UIColor. Это все значения NSString и float, поэтому у вас не должно возникнуть проблем с их сохранением.

- (NSString *) pahtForFile:(NSString*) filename
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
return [documentsDirectory stringByAppendingPathComponent:filename];
}


- (void) save
{
//get RGB and fontName , fontSize like I explained above

NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
[dictionary setObject:fontName forKey:@"fontName"];
[dictionary setObject:[NSNumber numberWithFloat:fontSize]   forKey:@"fontSize"];
[dictionary setObject:[NSNumber numberWithFloat:red]    forKey:@"red"];
[dictionary setObject:[NSNumber numberWithFloat:green]  forKey:@"green"];
[dictionary setObject:[NSNumber numberWithFloat:blue]   forKey:@"blue"];

NSString *filepath = [self pathForFile:@"save.plist"];
[dictionary writeToFile:filepath atomically:TRUE];
}

- (void) load 
{
float red,green,blue,fontSize;
NSString *fontName;

NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfFile:[self pahtForFile:@"save.plist"]];
red = [[dictionary objectForKey:@"red"] floatValue];
green = [[dictionary objectForKey:@"green"] floatValue];
blue = [[dictionary objectForKey:@"blue"] floatValue];

fontSize = [[dictionary objectForKey:@"fontSize"] floatValue];
fontName = [dictionary objectForKey:@"fontName"];

//now rebuild color and font like this:
UIColor *color = [UIColor colorWithRed:red green:green blue:blue alpha:1];
UIFont *font = [UIFont fontWithName:fontName size:fontSize];
}

Надеюсь это поможет. Кстати: если вы найдете ответ полезным, отметьте его как правильный.

Ваше здоровье,

Джордж

person George    schedule 05.07.2012
comment
Хорошо спасибо большое. Я действительно новичок в Xcode и понятия не имею, что делаю. Вы думаете, что в любом случае вы могли бы придумать какой-нибудь демонстрационный код? Это ооочень помогло бы. Спасибо - person Nicholas; 05.07.2012
comment
Смотрите мой отредактированный ответ. Это сохранит ваши значения в файле. Преимущество для новичка в iOS заключается в том, что вы можете запустить приложение на симуляторе и проверить фактический файл, чтобы увидеть, правильно ли он сохранил информацию. Чтобы найти путь к файлу, просто запишите, что возвращает pathForFile. - person George; 05.07.2012
comment
Хорошо, код выглядит хорошо, только есть несколько проблем. За исключением словаря в сохранении под NSMUltiableDictionary есть ошибки. Все они говорят об использовании необъявленного идентификатора... имени шрифта или других цветах. Также NSString в сохранении. Эта ошибка не видна. @interface объявляет селектор pathForFile. - person Nicholas; 05.07.2012
comment
Ну, допустим, вы хотите сохранить/загрузить в классе под названием MyClass. Объявите в MyClass.h метод pathForFile. После этого в вашем MyClass.m реализуйте все, что вам нужно + методы сохранения/загрузки выше. В вашем методе сохранения, прежде чем вставлять код, который я написал, получите RGB цвета, как показано в ссылке, приведенной в моем ответе. Для шрифта достаточно сказать font.fontName и font.pointSize. Но для RGB вам придется посмотреть на эту ссылку. Мы даем ответы здесь, на SO, и пытаемся вам помочь. Мы не собираемся делать целые проекты и выкладывать их. - person George; 06.07.2012