2015-11-21 45 views
0

所以,我創建了一個顯示在選定註釋上的自定義標註。一切工作正是我想要的 - 唯一的問題是我放棄了同一類型的另一個引腳後,所有以前的引腳將顯示相同的信息。例如,我可能會在標註「McDonalds」中顯示針位下降,下一個針位顯示「Starbucks」。現在我以前丟棄的所有針腳都會顯示「星巴克」。在註釋中存儲數據並在自定義標註上顯示,但數據更改爲最新更新

我目前正在嘗試將信息存儲在註解的字幕屬性中,然後通過格式化的字符串將其顯示到我的自定義UIView的標籤上......它的作品,但我需要註釋的信息永不改變。必須有一些我失蹤或不明白的東西。任何幫助都感激不盡。

我已經發布了所有我認爲與以下相關的代碼。謝謝!

定製Callout.h

#import <UIKit/UIKit.h> 

@interface PinView : UIView 
{ 
    UIView *view; 
    UILabel *theValueLabel; 
} 

@property (nonatomic, retain) IBOutlet UIView *view; 
@property (nonatomic, retain) IBOutlet UILabel *theValueLabel; 

@end 

定製Callout.m

#import "PinView.h" 

@implementation PinView 
@synthesize theValueLabel; 
@synthesize view; 



- (id)initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 
    if (self) { 
     UIView *nib = [[[UINib nibWithNibName:@"customView" bundle:nil] instantiateWithOwner:self options:nil] objectAtIndex:0]; 
     [self addSubview:nib]; 
    } 
    return self; 
} 


-(id)initWithCoder:(NSCoder *)aDecoder { 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     if (self.subviews.count == 0) { 
      UIView *nib = [[[UINib nibWithNibName:@"customView" bundle:nil] instantiateWithOwner:self options:nil] objectAtIndex:0]; 
      [self addSubview:nib]; 
     } 
    } 
    return self; 
} 

- (void)awakeFromNib { 
    [super awakeFromNib]; 
    [self setup]; 
} 

- (void)setup { 
    self.theValueLabel.text = @"foo"; 
} 

在我的主視圖Controller.m或者

@interface BreadTrailViewController()<CLLocationManagerDelegate, MKMapViewDelegate, MFMailComposeViewControllerDelegate> 
{ 
    PinView *aView 

    MKPointAnnotation *Pin1; 
} 

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations 
{ 
    CLLocation *location = [locations lastObject]; 

    if (location != nil) 
    { 
     Pin1 = [[MKPointAnnotation alloc] init]; 
     Pin1.title = @"Venue"; 
     Pin1.subtitle = [NSString stringWithFormat:@"Venue Name: %@\n%f,%f\nAddress: %@",revGeocodeVenue, lat, lng, revGeocodeAddress]; 
     Pin1.coordinate = location.coordinate; 
     [self.mapView addAnnotation:Pin1]; 
    } 
} 

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
    // If it's the user location, just return nil. 
    if ([annotation isKindOfClass:[MKUserLocation class]]) 
     return nil; 

    // Handle any custom annotations. 
    if ([annotation isKindOfClass:[MKPointAnnotation class]]) 
    { 
     MKPinAnnotationView *pinView = (MKPinAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:@"CustomPinAnnotationView"]; 

     if (!pinView) 
     { 
      pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"CustomPinAnnotationView"]; 

      pinView.canShowCallout = NO; 

     } else { 

      pinView.annotation = annotation; 
     } 

     if ([[annotation title] containsString:@"Venue"]) 
     { 
      pinView.pinTintColor = [UIColor greenColor]; 
     } 

     return pinView; 

    } 
    return nil; 

} 

-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view 
{ 
    aView = [[PinView alloc] initWithFrame:CGRectMake(0, 0, 300, 350)]; 

    aView.layer.cornerRadius = 20; 
    aView.layer.masksToBounds = YES; 
    aView.center = CGPointMake(view.bounds.size.width*0.5f, -aView.bounds.size.height*0.35f); 

    //Using the Pin's subtitle to store the data string and display on PinView 
    if ([[view.annotation title] containsString:@"Venue"]) 
    { 
     aView.theValueLabel.text = Pin1.subtitle; 
    } 

    [view addSubview:aView]; 
} 

-(void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view 
{ 
    [aView removeFromSuperview]; 
} 

回答

0

我發現這個問題!當我應該使用view.annotation.subtitle時,我正在使用Pin1.subtitle - 現在一切正常。我希望這可以幫助別人!

-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view 
{ 
    aView = [[PinView alloc] initWithFrame:CGRectMake(0, 0, 300, 350)]; 

    aView.layer.cornerRadius = 20; 
    aView.layer.masksToBounds = YES; 
    aView.center = CGPointMake(view.bounds.size.width*0.5f, -aView.bounds.size.height*0.35f); 

    //Using the Pin's subtitle to store the data string and display on PinView 
    if ([[view.annotation title] containsString:@"Venue"]) 
    { 
     aView.theValueLabel.text = view.annotation.subtitle; 
    } 

    [view addSubview:aView]; 
} 
相關問題