我的应用程序有一系列文本字段,复选框和其他控件。理想情况下,我会要求用户在任何(或所有)控件上更改某些内容时保存信息。
有没有办法让这个更改行为应用程序范围?或者我需要为每个控件创建一个动作并在那里设置代码?
如果这有任何不同,我正在使用Xcode 4.
感谢您的帮助。
答案 0 :(得分:2)
无论如何,您需要为每个控件编写代码(以处理用户更改)。
根据您的应用设置方式,您可能需要为每个可更改的属性编写其他代码。
我建议使用NSNotificationCenter,并在您的某个数据属性发生更改时发送“更改内容”通知。
触摸控件时,在某个数据存储对象上设置属性:
-(IBAction)grommetSwitchPress:(UISwitch*)sender
{
self.userData.wantsGrommets = sender.on;
}
该数据存储类将定义一个属性:
@interface UserData : NSObject
{
}
@property (nonatomic, assign) BOOL wantsGrommets;
使用自定义属性设置器来测试值是否已更改:
-(void)setWantsGrommets:(BOOL)wantsThem
{
if (wantsGrommets != wantsThem) // compares current property value with incoming
{
wantsGrommets = wantsThem;
[[NSNotificationCenter defaultCenter]
postNotificationName:NOTIFY_SOMETHING_CHANGED
object:self];
}
}
在某些标题中,您将定义通知消息:
#define NOTIFY_SOMETHING_CHANGED @"somethingChanged"
由您自行决定将代码放在应用程序中的哪个位置,以监听NOTIFY_SOMETHING_CHANGED,例如:
- (void)viewDidLoad:(BOOL)animated
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(somethingChanged:)
name:NOTIFY_SOMETHING_CHANGED
object:nil];
}
在somethingChanged:方法中,您可以将数据保存到NSUserDefaults,例如。
我建议不要“在任何(或所有)控件上更改某些内容时要求用户保存信息。”告诉用户他们是否希望保存自己的更改是很麻烦的......当然他们会这样做。如果您想让他们有机会退出,请改为提供“还原”或“重置”按钮。