0

ユーザーがピンをドロップするために押すmapViewがあります。一度に複数のピンが存在する場合があり、各注釈ビューには、押されたときに新しいビューをスタックにプッシュするコールアウトがあります。私がやりたいのは、注釈ビューのタイトルを2番目のビューのラベルに渡すことです。

ピンをドロップするコードは次のとおりです。

-(void)press:(UILongPressGestureRecognizer *)recognizer
{
    CGPoint touchPoint = [recognizer locationInView:worldView];
    CLLocationCoordinate2D touchMapCoordinate = [worldView convertPoint:touchPoint toCoordinateFromView:worldView];

    geocoder = [[CLGeocoder alloc]init];
    CLLocation *location = [[CLLocation alloc]initWithCoordinate:touchMapCoordinate
                                                    altitude:CLLocationDistanceMax
                                          horizontalAccuracy:kCLLocationAccuracyBest
                                            verticalAccuracy:kCLLocationAccuracyBest
                                                   timestamp:[NSDate date]];
    [geocoder reverseGeocodeLocation:location
               completionHandler:^(NSArray *placemarks, NSError *error) {
                   NSLog(@"reverseGeocoder:completionHandler: called");
                   if (error) {
                       NSLog(@"Geocoder failed with error: %@", error);
                   } else {
                       CLPlacemark *place = [placemarks objectAtIndex:0];
                       address = [NSString stringWithFormat:@"%@ %@, %@ %@", [place subThoroughfare], [place thoroughfare], [place locality], [place administrativeArea]];

                       if (UIGestureRecognizerStateBegan == [recognizer state]) {
                           addressPin = [[MapPoint alloc]initWithCoordinate:touchMapCoordinate
                                                                        title:address];
                           [worldView addAnnotation:addressPin];
                       }
                   }
               }];
}

そして、これが私が2番目のビューと呼ぶコードです:

-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
   PinViewController *pinViewController = [[PinViewController alloc]init];
    [self passValues];
    [[self navigationController]pushViewController:pinViewController animated:YES];
}
4

2 に答える 2

1

MKAnnotation (MyLocation など) をオーバーライドして、MyLocation.h ファイルで宣言できます。

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

@interface MyLocation : NSObject <MKAnnotation> {
    NSNumber *identyfier;
    NSString *_name;
    NSString *_address;
    CLLocationCoordinate2D _coordinate;
}

@property (copy) NSString *name;
@property (copy) NSString *address;
@property (copy) NSNumber *identyfier;
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;

- (id)initWithName:(NSString*)name address:(NSString*)address 
    coordinate:(CLLocationCoordinate2D)coordinate identyfier:(NSNumber *) identyfier;

@終わり

MyLocation.m ファイル内:

#import "MyLocation.h"

@implementation MyLocation

@synthesize name = _name;
@synthesize address = _address;
@synthesize coordinate = _coordinate;
@synthesize identyfier = _identyfier;

- (id)initWithName:(NSString*)name address:(NSString*)address 
    coordinate:(CLLocationCoordinate2D)coordinate identyfier:(NSNumber *)identyfier {
    if ((self = [super init])) {
        _name = [name copy];
        _address = [address copy];
        _coordinate = coordinate;
        _identyfier = identyfier;
    }
    return self;
}

マップ ビューで注釈を宣言するときは、次のメソッドを使用します。

MyLocation *pin = [[MyLocation alloc] initWithName:place.name address:place.address coordinate:coordinate2D identyfier:some_id];

たとえば、マップ デリゲートでは次のようになります。

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {

あなたが使用することができます:

((MyLocation *)annotation).identyfier

選択した注釈を確認します(もちろん、 MyLocation クラスでさまざまな変数を使用できます)

于 2012-10-24T22:32:41.610 に答える
0

通常、変数を渡す必要がある場合は、両方のビューで読み取ることができるグローバル変数を作成するだけです。

そこには

extern (NSString *)some_variable_name を .h ファイルに入れ、.m ファイルにグローバルに入れます (NSString *)some_variable_name ;

すべてのビューで読み取ることができる

または、変数の前にある + 記号。ビューを含むすべてのビューで読み取ることができます (グローバルを .m ファイルの上部に設定し、.h ファイルをコマンドで設定します)。

何か = [someview that_variable] ;

于 2012-10-24T22:24:21.340 に答える