2014-02-07 7 views
0

대물 렌즈의 DetailDisclosure 버튼에 태그를 설정하고 싶습니다. 내 예전의 코드는 다음과 같습니다DetailDisclosure에 태그를 설정하십시오

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
    if (annotation == mapView.userLocation) 
    { 
     return nil; 
    } 
    else 
    { 
     static NSString * const identifier = @"MyCustomAnnotation"; 

     static int i; 

     MKAnnotationView* annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:identifier]; 

     if (annotationView) 
     { 
      annotationView.annotation = annotation; 
     } 
     else 
     { 
      annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation 
                reuseIdentifier:identifier]; 
     } 

     NSLog(@"%i",annotationView.tag); 
     annotationView.tag=annotationView.tag+1; 
     NSLog(@"%i",annotationView.tag); 

     annotationView.image = [UIImage imageNamed:@"pin1.png"]; 
     annotationView.canShowCallout = YES; 
     UIImageView *sfIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"newlocation.png"]]; 
     annotationView.leftCalloutAccessoryView = sfIconView; 
     UIButton *InformationButton=[UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 

     [InformationButton addTarget:self action:@selector(annotationButtClicked:) forControlEvents:UIControlEventTouchUpInside]; 

     InformationButton.tag=i; 

     annotationView.rightCalloutAccessoryView=InformationButton; 

     UILongPressGestureRecognizer *longGesture=[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(LongPressEvent:)]; 

     [annotationView addGestureRecognizer:longGesture]; 

     return annotationView; 
    } 
} 

기능 구현

- (void)annotationButtClicked:(id)sender 
{ 
    NSLog(@"%i",[sender tag]); 
} 

콘솔 출력 내가 DetailDisclosure에 태그를 설정하는 방법 때마다 0

입니까?

+0

코드를 InformationButton.tag = 10으로 수정할 수 있습니까? InformationButton.tag = i의 인스턴스; 다시 시도하십시오. 나는 내가 0이라고 믿고 이것이 당신의 로그가 0을 반환하는 이유입니다. – Greg

+0

소문자로 시작하는 주석 이름'InformationButton'. – Larme

+0

태그를 사용하지 마십시오! 훨씬 더 내장 된 방법이 있습니다. http://stackoverflow.com/questions/9876042/annotation-details-after-detail-disclosure-pressed 및 http://stackoverflow.com/questions/9462699/how-to-recognize-which-pin-was-pped를 참조하십시오. . – Anna

답변

1

위의 언급에서 대문자로 변수의 이름을 지정하면 안됩니다. 목표 c에서는 대개 클래스를 나타냅니다.

대신이 구문을 사용하여 태그의 값을 설정해보십시오.

[InformationButton setTag:i]; 

또한

NSLog(@"tag to set = %d", i); 그래서 당신이 코드가 실행되는 시점에 설정되어 있는지 볼 수보십시오.