2

詳細ビューコントローラーが閉じられたことをマップビュー (マスター) コントローラーで検出するにはどうすればよいですか? ピンと注釈を含むマップビューがあります。任意の注釈で rightCalloutAccessoryView がタップされると、モーダル詳細ビュー コントローラーが performSegueWithIdentifier を介して呼び出されます。ちなみに、これが正しいかどうかはわかりませんが、Master View ControllerとDetail View ControllerはNavigation Controllerで接続されています。

私の目標は、詳細ビュー コントローラーでのユーザー アクションに基づいて、条件付きアクションをマップビュー (マスター ビュー) に戻すことです。具体的には、ピンの削除機能をタップした場合、コントロールがマップビューに戻ったときにピンを削除したいと考えています。単に [完了] ボタンをタップすると、ピンと注釈が画面に残ります。

私の限られた知識では、下の 2 行目でピンを削除できますが、問題は、rightCalloutAccessorView アイコンがタップされた直後で詳細ビューが表示される前に、ピンと注釈が削除されていることを確認できることです。つまり、ユーザーが詳細画面で [完了] ボタンをタップすると、ピンと注釈が既に削除された状態でマップ ビューに戻ります。ユーザーが [削除] ボタンをタップした場合にのみ削除します。

   [self performSegueWithIdentifier:@"PinDetail" sender:self];
   [self.mapView removeAnnotation:MA];

だから私の質問は本当に:

  1. removeAnnotation コードはどこに入れるのですか? 現在の場所では、詳細ビューが表示される前にピンの削除が行われます。
  2. 詳細ビューの [削除] ボタンがタップされたかどうかを検出するにはどうすればよいですか?

ありがとう。

4

1 に答える 1

2

デリゲートを使用して、詳細ビューのアクションに基づいてマップビューでアクションを実行できます。 performSegueWithIndentifier では、詳細ビューをマップビューのデリゲートとして割り当てることができ、アクションを実行します。

または、詳細ビューのターゲットとセレクターを設定し、詳細ビューでアクションが発生したときに、次のようにマップ ビューをターゲットとするセレクターを呼び出すことができます。

 [theController setTarget:self andSelector:@selector(performAction)];

ここで、theController は宛先ビュー コントローラー、つまり詳細ビュー コントローラーです。

2.View Controllerの.hファイルの詳細

 id m_Target;
  SEL m_Selector;

詳細ビューの controller.m ファイル:

- (void)setTarget:(id)inTarget andSelector:(SEL)inSelector
{
    m_Target = inTarget;
    m_Selector = inSelector;
}

3. 詳細表示呼び出しを閉じる前に

 if ([m_Target respondsToSelector:m_Selector]) {
            [m_Target performSelector:m_Selector withObject:nil];
        }

4.マップ ビュー コントローラー .m ファイルで performAction を定義します。

于 2012-06-08T05:50:48.397 に答える