0

標準/衛星/ハイブリッド マップを 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;
    }

}

助けてくれてありがとう:)

4

2 に答える 2

1

確認するには、modalView (pageCurl) が閉じられたときに、デリゲート メソッドを pageCurl コントローラーに追加するだけです。

viewWillDisappear:

次に、マップ更新ロジックをそこに追加します。

于 2012-04-19T15:50:12.970 に答える
1

なぜそうするのかわからない:

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

IBAction では、(id)sender からイベントを取得します。

入れてみませんか:

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

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

それは何ですか?セグメント化されたControlMapType

送り主と同じ?

于 2012-04-19T14:49:36.443 に答える