2011-01-31 62 views
1

我想檢測右側的CALLOUTAccessoryView是否已經通過下面的委託方法點擊了,我該怎麼做?檢測在calloutAccessoryControlTapped委託中點擊哪個配件視圖

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

你已經實現了`calloutAccessoryControlTapped:`方法嗎?或者,你想知道如何實現?或者,您對此有其他問題?更加詳細一些。 – EmptyStack 2011-01-31 05:47:09

+0

那麼有兩個accessoryView,左和右..所以這個委託實際上何時被解僱?它是左右配件視圖嗎?我只想在觸發rightAccessoryView時觸發這一個。 – aherlambang 2011-01-31 06:09:40

回答

11

calloutAccessoryControlTapped方法將被觸發兩個leftCalloutAccessoryViewrightCalloutAccessoryView水龍頭行動。要區分附件視圖,您可以在創建配件視圖時爲其設置tag。在您的calloutAccessoryControlTapped方法中,您可以檢查標記值並根據標記值執行相應的操作。

例如,假設你已經分別設定12leftright附屬視圖的tags。然後你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

我會用下面的實現:

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語法有點比平時由於leftCalloutAccessoryViewrightCalloutAccessoryView是自選更加複雜,但它避免使用標籤。