Iphone 单击pin注释时如何显示另一个视图

Iphone 单击pin注释时如何显示另一个视图,iphone,ios,xcode,ipad,mapkit,Iphone,Ios,Xcode,Ipad,Mapkit,我在pin注释上添加了一个详细信息按钮。我想去另一个景点。当我点击它时,下面的代码不起作用。我不知道问题出在哪里 - (MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:(id <MKAnnotation>)annotation { MKPinAnnotationView *pinAnnotation = nil; if(annotation != mapview.userLocation)

我在pin注释上添加了一个详细信息按钮。我想去另一个景点。当我点击它时,下面的代码不起作用。我不知道问题出在哪里

- (MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:(id <MKAnnotation>)annotation
{
    MKPinAnnotationView *pinAnnotation = nil;
    if(annotation != mapview.userLocation)
    {
        static NSString *defaultPinID = @"myPin";
        pinAnnotation = (MKPinAnnotationView *)[mapview dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
        if ( pinAnnotation == nil )
            pinAnnotation = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID] autorelease];

        pinAnnotation.canShowCallout = YES;

        //instatiate a detail-disclosure button and set it to appear on right side of annotation
        UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        pinAnnotation.rightCalloutAccessoryView = infoButton;

    }

    return pinAnnotation;
}

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{

    if ([(UIButton*)control buttonType] == UIButtonTypeDetailDisclosure){
    annotationViewController *detailView=[[annotationViewController alloc] initWithNibName:@"annotationViewController" bundle:nil];

    [[self navigationController] pushViewController:detailView animated:YES];
    [detailView release];
}
}
-(MKAnnotationView*)地图视图:(MKMapView*)mV视图用于注释:(id)注释
{
MKPinAnnotationView*pinAnnotation=nil;
if(注释!=mapview.userLocation)
{
静态NSString*defaultPinID=@“myPin”;
pinAnnotation=(MKPinAnnotationView*)[mapview dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
if(pinAnnotation==nil)
pinAnnotation=[[MKPinAnnotationView alloc]initWithAnnotation:annotation重用标识符:defaultPinID]自动释放];
pinAnnotation.canShowCallout=是;
//安装详细信息披露按钮,并将其设置为显示在批注的右侧
UIButton*infoButton=[UIButton Button类型:UIButtonTypedTailDisclosure];
pinAnnotation.rightCalloutAccessoryView=infoButton;
}
返回注释;
}
-(无效)地图视图:(MKMapView*)地图视图注释视图:(MKAnnotationView*)视图调用访问控制点击:(UIControl*)控制
{
如果([(UIButton*)控制按钮类型]==UIButtonType){
annotationViewController*detailView=[[annotationViewController alloc]initWithNibName:@“annotationViewController”捆绑包:nil];
[[self-navigationController]pushViewController:detailView动画:是];
[详细视图发布];
}
}
方法
-(void)mapView:(MKMapView*)mapView annotationView:(MKAnnotationView*)视图调用访问控制点击:(UIControl*)控制是一种委托方法。这就是为什么需要将mapview的委托设置为实现此方法的类(此处为
self
),以便调用它

您还需要告诉类您正在实现
MKMapViewDelegate
方法。为此,在you.h中,更改此行:

@interface MyViewController : UIViewController
致:

@接口MyViewController:UIViewController

现在应该调用您的方法。

您是否设置了
MKMapViewDelegate
delegate我没有设置mapview.delegate=self;在我的视图控制器中,但它会从
.h
文件添加
中的不兼容类型“viewController”向我发出警告分配id。它不会给出错误,您的代码将正常工作
@interface MyViewController : UIViewController <MKMapViewDelegate>