我有一个UISwitch,其中包括,禁用UITextfield。 使用NSUserDefaults时,我管理开关以记住其当前状态(开/关)
NSString *const MyPrefKey =@"MyPrefKey";
[[NSUserDefaults standardUserDefaults]
setBool:[sender isOn]
forKey:MyPrefKey];
使用
在viewDidLoad中调用开关状态 BOOL switchState =[[NSUserDefaults standardUserDefaults]boolForKey:MyPrefKey];
[mySwitch setOn:switchState];
这很完美,UISwitch的位置被记住了。
用于在开关改变时启用文本字段
我按照建议尝试了:
[[NSUserDefaults standardUserDefaults]
setObject:[NSNumber numberWithBool:[myTextField isEnabled]]
forKey:MyPrefKey];
并召回
BOOL mtf =[[NSUserDefaults standardUserDefaults]boolForKey:MyPrefKey];
[myTextField setEnabled:mtf];
哪个也很好。 但是,当时只有其中一项工作。如何同时设置更多默认值?我必须制作几个PrefKeys吗?或者所有这些都可以存储在同一个prefKey中?
最后,我尝试使用NSUserDefaults
更改textcolor[[NSUserDefaults standardUserDefaults]
setObject: [myTextField textColor]
forKey: MyPrefKey];
用调用时导致崩溃的
UIColor*newColor= [[NSUserDefaults standardUserDefaults] objectForKey: EfloraSharePrefKey];
[myTextField setTextColor:newColor];
那么如何将NSUserDefault与textColor一起使用?我会批评任何好的解决方案。
答案 0 :(得分:1)
您只能将属性列表对象保存到NSUserDefaults。你必须以某种方式序列化你的颜色。一个可能的解决方案:
CGFloat r, g, b, a;
[myTextField.textColor getRed:&r green:&g blue:&b alpha:&a];
NSNumber *rn, *gn, *bn, *an;
rn = [NSNumber numberWithFloat:r];
gn = [NSNumber numberWithFloat:g];
bn = [NSNumber numberWithFloat:b];
an = [NSNumber numberWithFloat:a];
NSDictionary *color = [NSDictionary dictionaryWithObjectsAndKeys:
rn, @"red",
gn, @"green",
bn, @"blue",
an, @"alpha",
nil];
[[NSUserDefaults standardUserDefaults] setObject:color forKey:@"TextColor"];
并检索它:
NSDictionary *color = [[NSUserDefaults standardUserDefaults] objectForKey:@"TextColor"];
NSNumber *rn, *gn, *bn, *an;
rn = [color objectForKey:@"red"];
...
UIColor *c = [UIColor colorWithRed:[rn floatValue]
green:[gn floatValue]
blue:[bn floatValue]
alpha:[an floatValue]];
textField.textColor = c;
如果你想要非常优雅,可以将它包装成一个类别甚至使UIColor NSCoding-comformant(为了能够直接将它保存到用户默认plist)。
答案 1 :(得分:0)
您可以使用NSKeyedUnarchiver归档/取消归档UIColor的数据。将NSData保存为NSUserDetaults的对象。使用
从颜色创建NSData[NSKeyedArchiver archivedDataWithRootObject:yourColor];
并使用
取消归档[NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] objectForKey:yourColorKey]]
答案 2 :(得分:0)
如H2C03所述,您需要将其设为有效的属性列表项。悬停时,某些颜色不在RGB颜色空间中。但是,您可以将NSData放在plist中,UIColor支持存档。
NSData *colorData = [NSKeyedArchiver archivedDataWithRootObject:color];
然后在另一边......
UIColor *color = [NSKeyedUnarchiver unarchiveObjectWithData:colorData];