У меня есть сегментированный элемент управления с 3 вариантами сохранения стандартных / спутниковых / гибридных карт в NSUserDefaults. Одна из моих проблем заключается в том, что сегментированный элемент управления возвращается к первому сегменту при повторном посещении mapSettingsViewController. Другая проблема заключается в том, что mapViewController не перезагружается на viewWillAppear.
Я использую модальный переход pageCurl с раскадровкой - не уверен, что это имеет значение.
это код в контроллере представления настроек (mapSettingsViewController) для сохранения сегментированного выбора:
- (IBAction)changeMapType: (id)sender{
NSInteger index = ((UISegmentedControl*)sender).selectedSegmentIndex;
// Get the shared defaults object.
NSUserDefaults *mapUserPreferences = [NSUserDefaults standardUserDefaults];
if(segmentedControlMapType.selectedSegmentIndex == 0){
// Save the index.
[mapUserPreferences setInteger:index forKey:@"mapViewKey"];
}
else if(segmentedControlMapType.selectedSegmentIndex == 1){
// Save the index.
[mapUserPreferences setInteger:index forKey:@"mapViewKey"];
}
else if(segmentedControlMapType.selectedSegmentIndex == 2){
// Save the index.
[mapUserPreferences setInteger:index forKey:@"mapViewKey"];
}
// Write them to disk
[mapUserPreferences synchronize];
}
затем в первом контроллере представления (mapViewController) для отображения изменения базы карты, на которой сегмент был выбран пользователем. Я поместил код в viewWillAppear, чтобы карта перезагружалась каждый раз при появлении представления.
-(void) viewWillAppear:(BOOL)animated {
// Get the settings and set the selected index.
NSUserDefaults *mapUserPreferences = [NSUserDefaults standardUserDefaults];
if([mapUserPreferences integerForKey:@"mapViewKey"] == 0) {
mapView.mapType = MKMapTypeStandard;
}
if([mapUserPreferences integerForKey:@"mapViewKey"] == 1) {
mapView.mapType = MKMapTypeSatellite;
}
if([mapUserPreferences integerForKey:@"mapViewKey"] == 2) {
mapView.mapType = MKMapTypeHybrid;
}
}
спасибо за любую помощь :)