Вам все равно нужно написать код для каждого элемента управления (для обработки пользовательских изменений).
Возможно, вам потребуется написать дополнительный код для каждого изменяемого свойства, в зависимости от того, как настроено ваше приложение.
Я бы предложил использовать 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];
}
В методеthingChanged: вы можете, например, сохранять данные в NSUserDefaults.
Я бы не советовал "просить пользователя сохранить информацию, когда что-то меняется на каком-либо (или всех) элементах управления". Трудно спросить пользователя, хотят ли они сохранить свои изменения… конечно, они хотят. Если вы хотите дать им возможность отступить, вместо этого предоставьте кнопку «Возврат» или «Сброс».