我有一个分段控件,有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;
}
}
感谢您的帮助:))
答案 0 :(得分:1)
我不知道你为什么这样做:
if(segmentedControlMapType.selectedSegmentIndex == 0){
// Save the index.
[mapUserPreferences setInteger:index forKey:@"mapViewKey"];
在IBAction中,您从(id)发件人处获得事件。
你为什么不放下:
if((UISegmentedControl*)sender.selectedSegmentIndex == 0)
也许我在错误的轨道上,但是您正在与分段控件的2个不同实例对象进行交谈。
这是什么? segmentedControlMapType与发件人相同?
答案 1 :(得分:1)
要检查,当modalView(pageCurl)被解除时,只需将委托方法添加到pageCurl控制器:
viewWillDisappear:
然后在那里添加地图更新逻辑。