質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Q&A

解決済

1回答

2679閲覧

MKMapViewの選択されたピンを別画面で削除する方法

mm--_--mm

総合スコア113

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

0グッド

0クリップ

投稿2015/10/24 01:23

いつもお世話になっております。

現在、objective-cで地図アプリを作成しています。
そこで、ピンを立てて選択すると別画面に遷移し、ピンを削除するかを選択して、削除するを選択すると前の画面に戻り遷移する前に選択したピンを消すという処理を行いたいのですが、 選択されたピンが消えず、一番最後に立てたピンが消えてしまいます....

この問題の解決方法を知っている方がおりましたら教えていただけると幸いです。
よろしくお願いいたします。

objective

1 2 3- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id < MKAnnotation >)annotation //ピンのカスタマイズをするとこ 4{ 5 6 // 表示するアノテーションがCurrent Locationの場合はスルーする 7 if([annotation.title isEqualToString:@"Current Location"]){ 8 return nil; 9 } 10 11 NSString *identifier = @"MyPin"; 12 MKPinAnnotationView *pin = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier]; // 識別子で刺したピンを参照する 13 14 if(pin == nil){ // ピンがなければピンを作る 15 NSLog(@"pin == nil"); 16 pin = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier]; 17 pin.animatesDrop = YES; // アニメーションをする 18 pin.draggable = YES; //ピンのドラッグ可能 19 20 21 pin.canShowCallout = YES; // ピンタップ時にコールアウト(吹き出し)を表示する 22 [pin setRightCalloutAccessoryView:[UIButton buttonWithType:UIButtonTypeDetailDisclosure]]; 23 } 24 return pin; 25} 26-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control{ //ピンの詳細画面に飛ぶ 27 28 UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 29 pin_settingViewcontroller = [storyboard instantiateViewControllerWithIdentifier:@"pin_setting"]; 30 [self.navigationController pushViewController:pin_settingViewcontroller animated:YES]; 31 32} 33-(void)remove_pin{ //この関数を遷移後の画面でdelegateでよぶ 34 [mv removeAnnotation:myPin]; 35} 36

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Objective

1-(void)remove_pin{ //この関数を遷移後の画面でdelegateでよぶ 2 [mv removeAnnotation:myPin]; 3}

こちらのメソッドのmyPinはどこから来たのでしょうか?
恐らくこのmyPinが参照しているものが「一番最後に立てたピン」になっているためご質問の現象が発生しているのだと思います。
ここにmyPinではなくタップで選択されたMKAnnotationを指定してみてください。

投稿2015/10/26 06:54

TakutoNagano

総合スコア150

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mm--_--mm

2015/10/26 12:45

myPinというのは自作クラスで作ったもので,MKAnnotationを継承?しています... 選択されたピンというのはプログラム上、どのように書けば良いのでしょうか?
TakutoNagano

2015/10/27 03:49

選択したMKAnnotationViewの参照を取得する部分のみ書けば以下のようになります。 動作確認まではとっていないので細かい修正は必要でしょう。 参考にしてみてください。 @proparty(weak) MKAnnotaionView *selectedAnnotationView; -(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control{ //ピンの詳細画面に飛ぶ // 選択されたAnnotationViewの参照を取得 selectedAnnotationView = view UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; pin_settingViewcontroller = [storyboard instantiateViewControllerWithIdentifier:@"pin_setting"]; [self.navigationController pushViewController:pin_settingViewcontroller animated:YES]; } -(void)remove_pin{ //この関数を遷移後の画面でdelegateでよぶ if selectedAnnotationView.annotation != nil { [mv removeAnnotation: selectedAnnotationView.annotation]; } }
mm--_--mm

2015/10/31 04:31

ご回答いただきありがとうございます。 このソースでは動きませんでしたが少しだけ修正したところ無事に動きました! ありがとうございました!! 今後とも宜しくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問