0

我有一个带有 3 个选项的分段控件,用于在 NSUserDefaults 中保存标准/卫星/混合地图。我遇到的一个问题是,每当重新访问 mapSettingsViewController 时,分段控件就会变回第一段。另一个问题是 mapViewController 不会在 viewWillAppear 上重新加载。

我正在使用带有 Storyboard 的 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;
    }

}

谢谢你的帮助 :)

4

2 回答 2

1

我不知道你为什么这样做:

if(segmentedControlMapType.selectedSegmentIndex == 0){
// Save the index.
[mapUserPreferences setInteger:index forKey:@"mapViewKey"];

在 IBAction 中,您从 (id)sender 获取事件。

你为什么不把:

if((UISegmentedControl*)sender.selectedSegmentIndex == 0)

也许我走错了路,但是您正在与分段控件的 2 个不同实例对象交谈。

它是什么?分段控制映射类型

和发件人一样吗?

于 2012-04-19T14:49:36.443 回答
1

要检查,当 modalView (pageCurl) 被解除时,只需将委托方法添加到您的 pageCurl 控制器:

viewWillDisappear:

然后在那里添加地图更新逻辑。

于 2012-04-19T15:50:12.970 回答