これは最善の解決策ではないかもしれませんが、間違いなく機能します。まず、文脈を観察するなど、色々と試してみましたが、クラッシュを乗り越えられず、面倒そうに見えました。だから、これは私がしたことです:
最初に、アラートを表示可能に保つための制御要素を指定しました。私の場合、カスタムアノテーションビューを作成しました。ユーザーがそのカスタムビューのボタンをクリックするたびに、それを表示したままにし、コンテンツを変更することもできます。そこで、そのカスタムビューにデリゲートを設定して、何かが変更されたときにマップが認識できるようにします。マップビューコントローラーで、そのメッセージをキャッチし、クラスメンバー変数をtrueに設定して、注釈ビューを残したいことを示します。
注:これは、選択メッセージが表示される前に発生します。
ここで、didDeselectAnnotationメソッドで、ブール値を確認します。表示したままにしたい場合は、注釈を削除しないことを選択し、ブール値をリセットして、アニメーションをNOに設定し、注釈を手動で再選択します。これにより、注釈ビューが「表示されたまま」になります。おそらくチートですが、ユーザーには違いがわかりません。そのブール値が選択解除に問題がないことを示している場合は常に、注釈を削除するだけですべて問題ありません。
したがって、ワークフローは次のとおりです。
- タッチピン
- CustomAnnotationViewが表示されます
- ユーザーがCustomAnnotationViewのボタンをクリックすると、アクションが発生したことがデリゲート(mapView)に通知されます。
- クラスのブール値を設定して、注釈を保持したいことを認識します
- 次に、mapViewはdidDeselectAnnotationメソッドを呼び出します
- didDeselectAnnotationメソッドで、条件付きを使用して注釈を削除するか、注釈を削除せずにアニメーションなしで手動で再選択することで注釈を保持するかを決定します。
これが他の人の役に立つことを願っています。これを理解するのに少し時間がかかりましたので、時間を節約できることを願っています。
より良い解決策を見つけたら、ぜひここに投稿してください!