標準/衛星/ハイブリッド マップを NSUserDefaults に保存するための 3 つのオプションを備えたセグメント化されたコントロールがあります。私が抱えている問題の 1 つは、mapSettingsViewController が再度アクセスされるたびに、セグメント化されたコントロールが最初のセグメントに戻ることです。もう 1 つの問題は、viewWillAppear で mapViewController がリロードされないことです。
Storyboarding で 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];
}
次に、最初のView Controller(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;
}
}
助けてくれてありがとう:)