2016-08-11 4 views
0

어떻게 MKAnnotationView에 단추를 추가 할 수 있습니까? 제목과 부제목을 추가했지만 버튼을 추가 할 수 없습니까? 왜 이해가 안되니? 어떻게 구현할 수 있습니까?사용자 지정 MKAnnotationView에 단추를 추가하는 방법

나는 .H

#import <UIKit/UIKit.h> 


    @interface AnnotationCellout : UIView 
    @property (weak, nonatomic) UILabel *nameLabel; 
    @property (weak, nonatomic) UILabel *infoLabel; 
    @property (weak, nonatomic) UIButton *info; 

    @end 

하는 .m

#import "AnnotationCellout.h" 

@implementation AnnotationCellout 

- (instancetype)initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 
    if (self) { 
     [self setupUI]; 
    } 
    return self; 
} 

- (void)setupUI { 
    // view 
    self.backgroundColor = [UIColor whiteColor]; 
    self.layer.borderColor = [UIColor purpleColor].CGColor; 
    self.layer.borderWidth = .5; 
    self.layer.cornerRadius = 5; 

    // titleLabel 
    UILabel *nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(2, 2, self.frame.size.width - 4, 17)]; 
    nameLabel.textAlignment = NSTextAlignmentCenter; 
    nameLabel.textColor = [UIColor purpleColor]; 
    nameLabel.font = [UIFont systemFontOfSize:14 weight:UIFontWeightBold]; 
    [self addSubview:nameLabel]; 
    self.nameLabel = nameLabel; 

    // subtitleLabel 
    UILabel *infoLabel = [[UILabel alloc] initWithFrame:CGRectMake(2, 20, self.frame.size.width - 4, 30)]; 
    infoLabel.numberOfLines = 2; 
    infoLabel.lineBreakMode = NSLineBreakByWordWrapping; 
    infoLabel.textAlignment = NSTextAlignmentCenter; 
    infoLabel.textColor = [UIColor darkGrayColor]; 
    infoLabel.font = [UIFont systemFontOfSize:12]; 
    [self addSubview:infoLabel]; 
    self.infoLabel = infoLabel; 

    UIButton *button   = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    button.frame    = CGRectMake(2, 20, self.frame.size.width - 4, 30); 
    [button setTitle:@"OK" forState:UIControlStateNormal]; 
    [button addTarget:self action:@selector(didTouchUpInsideCalloutButton:) forControlEvents:UIControlEventTouchUpInside]; 
    [self addSubview:_info]; 
    self.info = button; 

} 

@end 

MKAnnotationView

사용자 정의에 대한 수업을하고 난 지금이 ​​버튼 액션을 추가하는 방법을하지 않습니다.

+0

를 들어

-(void)loadAnnotation { for (int i =0; i< [mapData count]; i++) { NSMutableDictionary *dict = [mapData objectAtIndex:i]; double latitude = [[dict objectForKey:@"lat"]doubleValue]; double longitude = [[dict objectForKey:@"lon"]doubleValue]; CLLocationCoordinate2D coord; coord.latitude = latitude; coord.longitude = longitude; MKPointAnnotation *point = [[MKPointAnnotation alloc] init]; point.coordinate = coord; point.title = [dict objectForKey:@"title"]; point.subTitle = [dict objectForKey:@"subTitle"]; [self.mapView addAnnotation:point]; } } 

그런 다음 주석을로드하기 위해이 방법을 쓰기. 그 밖의 무엇이 필요합니까? –

+0

@TejaNandamuri이 버튼은 주석에 표시되지 않으며 제목과 부제목 만 표시됩니다. 이 버튼을 추가 할 수 없습니다. –

답변

0

MKAnnotationView에서 버튼 동작을 원할 경우이 위임 메서드를 사용할 수 있습니다.

사전의 임의의 배열 (mapData를 취함)에서 데이터를로드하십시오. 그런 다음 버튼에 액션 didTouchUpInsideCalloutButton을 추가 Validatiing

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view 
{ 

    MKPointAnnotation *testPoint = [[MKPointAnnotation alloc] init]; 
    testPoint = view.annotation; 
    NSLog(@"The title is %@",testPoint.title); 
    for (int i = 0; i<[mapData count]; i++) { 
     NSMutableDictionary *dict = [mapData objectAtIndex:i]; 
     if ([[dict objectForKey:@"title"] isEqualToString:testPoint.title]) { 
      NSLog(@"Hey I am clicked");//Perform your action Here 
     } 
    } 


} 
+0

많은 주석이 있습니다. 핵심 데이터에서 불러옵니다. 그리고이 주석에서 onclick 버튼을 열어서 자세히보기가 필요합니다. –