5

MKAnnotation別のビューにセグエするための開示ボタンを追加したいと考えています。

ボタンは次のようになります。

画像

これが私の.hおよび.mファイルです。


.h ファイル

//
//  POI.h
//

#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>

@interface POI : NSObject <MKAnnotation> {

    NSString *title;
    NSString *subtitle;
    CLLocationCoordinate2D coordinate;
}

@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *subtitle;
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;

- (id)initWithCoordinate:(CLLocationCoordinate2D)_coordinate title:(NSString *)_titolo andSubTitle:(NSString *)_sottotitolo;


@end

.m ファイル

//
//  POI.m

#import "POI.h"



@implementation POI

@synthesize title, subtitle, coordinate;
-(id)initWithCoordinate:(CLLocationCoordinate2D)_coordinate title:(NSString *)_titolo andSubTitle:(NSString *)_sottotitolo {

    [self setTitle:_titolo];
    [self setSubtitle:_sottotitolo];
    [self setCoordinate:_coordinate];



    return self;
}

@end

私のViewControllerでは、次を使用してこれを呼び出します:

  pinLocation.latitude = 4.8874;
    pinLocation.longitude = 1.400;
    POI *poi = [[POI alloc] initWithCoordinate:pinLocation title:@"foo" andSubTitle:@"bar"];
    [_mapView addAnnotation:poi];
4

2 に答える 2

12

3 つのステップ。

1) ヘッダー ファイル (.h)または実装ファイル (.m) のクラス拡張子は、以下に準拠していMKMapViewDelegateます。

@interface ViewController : UIViewController <MKMapViewDelegate> { ... } 

2) ビュー コントローラーをデリゲートとして設定し、MKMapViewDelegateデリゲート コールバックを受信します。一般的に行われるviewDidLoad:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.mapView.delegate = self;
}

3) 次のデリゲート関数を実装して、開示ボタンを表示します。

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation
{   
    MKPinAnnotationView *newAnnotation = [[MKPinAnnotationView alloc]     initWithAnnotation:annotation reuseIdentifier:@"pinLocation"];

    newAnnotation.canShowCallout = YES;
    newAnnotation.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];

    return newAnnotation;
}

次の関数は、開示ボタンに触れたときに実行されるアクション (この場合はビューの表示) を決定するのに役立ちます。

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
    //launch a new view upon touching the disclosure indicator
    TestVCViewController *tvc = [[TestVCViewController alloc] initWithNibName:@"TestVCViewController" bundle:nil];
    [self presentViewController:tvc animated:YES completion:nil];
}
于 2012-12-26T22:35:02.917 に答える
0

あなたの- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation方法ではこれを使用します:

annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];

annotationView返されるビューはどこにありますか。

于 2012-12-26T22:27:44.120 に答える