2012-04-19 6 views
0

NSUserDefaultsに標準/サテライト/ハイブリッドマップを保存する3つのオプションを持つセグメント化されたコントロールがあります。私が抱えている問題の1つは、mapSettingsViewControllerが再訪問されるたびに、セグメント化されたコントロールが最初のセグメントに戻ることです。もう一つの問題は、mapViewControllerがviewWillAppearにリロードしないことです。UISegmentedControlを使用してNSUserDefaultsでmapKitの設定を保存する - 正しく動作しない

StoryboardingでpageCurlモーダルトランジションを使用しています。問題があるかどうかはわかりません。

この設定のコードセグメント化された選択保存するコントローラ(mapSettingsViewController)を表示である:セグメントが選択されたマップベースへの変更を表示するために最初のビューコントローラ(mapViewController)で、次いで

- (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]; 
} 

をユーザーによって。 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

IBでセグメント化されていないコントロールを選択解除して変更しました。 mapViewControllerのviewWillAppearにマップはまだロードされません。ビューを離れて戻ってからロードする必要があります。私は、ページのカールの移行は、マップをリロードしないviewWillAppearと関係があるかどうか疑問に思っています... – hanumanDev

答えて

1

+0

私はそれがそれを行う方法だと確信しています。私はちょうどそれが終わった方法を研究しなければならないでしょう...再び感謝します – hanumanDev

1

あなたがなぜ私がいることを知りません:あなたは(ID)の送信者からのイベントを取得しIBActionで

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

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

は、たぶん私は間違ってトラックにしていますが、あなたは、セグメント化されたコントロールの2つの異なるインスタンスオブジェクトと話し:

は、なぜあなただ​​け入れていません。

この意味は? segmentedControlMapType

送信者と同じですか?

viewWillDisappear: 

そして、そこに地図更新ロジックを追加します、チェックmodalView(pageCurl)が却下されたときに、単にあなたのpageCurlコントローラにデリゲートメソッドを追加するには

+0

、ありがとう。マップされた設定がmapSettingsViewControllerで変更された後に再び訪れたときにmapViewControllerをリロードする方法はありますか?私はそれがviewWillAppearになると思った。 – hanumanDev

+0

そうです。私はチェックしました:NSLog(@ "%@"、[[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);私はストーリーボードでページカールトランジションを使用しています。 mapSettingsViewController(ページカール)からmapViewControllerに戻ると、マップの変更はありません。私がmapViewControllerビューを離れて戻ってくると、マップが正しく変更されます。 – hanumanDev

+0

viewWillAppearは呼び出されないためです。ちょうど私が下のポストに書いたように振る舞います – Fab1n

関連する問題