2011-01-31 13 views
1

rightCalloutAccessoryViewが以下のデリゲートメソッドでタップされているかどうかを検出したいと思います。calloutAccessoryControlTappedデリゲートでどのアクセサリビューがタップされているかを検出

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)contro 
+0

すでに 'calloutAccessoryControlTapped:'メソッドを実装していますか?または、あなたはそれを実装する方法を知りたいですか?または、これに関する他の問題がいくつかありますか?具体的に。 – EmptyStack

+0

よく2つのアクセサリビューがあります。このデリゲートは実際にはいつ発射されますか?それは左右両方のアクセサリービュー用ですか? rightAccessoryViewがタップされたときにこのイベントを発生させたいだけです。 – aherlambang

+0

calloutAccessoryControlTapped:左と右の両方のビューに対してメソッドがトリガーされます。私はここに答えを掲示しました。それがあなたを助けることを願っています。 – EmptyStack

答えて

11

calloutAccessoryControlTapped方法はleftCalloutAccessoryViewrightCalloutAccessoryView両方のタップアクションのためにトリガされます。アクセサリビューを区別するために、アクセサリビューを作成する際にアクセサリビューの両方にtagを設定することができます。 calloutAccessoryControlTappedメソッドでは、タグ値を確認し、タグ値に応じてそれぞれのアクションを実行できます。例えば

、あなたがそれぞれ自分のleftrightアクセサリビューのtagsため12を設定していることを検討してください。次に、あなたのcalloutAccessoryControlTapped方法は、次のように

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control { 

    if ([control tag] == 1) { 

     // Left Accessory Button Tapped 

    } else if ([control tag] == 2) { 

     // "Right Accessory Button Tapped 
    } 
} 
+0

うまく動作しますが、整数タグを使用しない別の方法があるのでしょうか? –

0

をになります私は、次の実装を使用します。

func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) { 
    switch control { 
    case let left where left == view.leftCalloutAccessoryView: 
     // tap on left 
     break 
    case let right where right == view.rightCalloutAccessoryView: 
     // tap on right 
     break 
    default: 
     break 
    } 
} 

switch構文がoptionalsことによりleftCalloutAccessoryViewrightCalloutAccessoryViewにもう少し複雑通常よりも、タグを使用しないようにします。

関連する問題