Iphone 添加UIButtonTypedExposition-逻辑问题

Iphone 添加UIButtonTypedExposition-逻辑问题,iphone,objective-c,Iphone,Objective C,我添加了一个,当用户单击pin时,弹出窗口显示蓝色箭头(uiButtonTypedTailDisclosure)。现在我想做的是,当用户单击它时,我需要该视图重定向到另一个包含更多详细信息的视图 例如:如果我单击的是一家医院,弹出窗口将显示其名称和ui按钮按钮。当我点击ui按钮按钮时,我应该重定向到另一个视图,该视图提供了该医院的更多信息 我的代码: -(void)callingMap:(NSArray *)hospitalArray { for(Hospital *hospital in h

我添加了一个,当用户单击pin时,弹出窗口显示蓝色箭头(
uiButtonTypedTailDisclosure
)。现在我想做的是,当用户单击它时,我需要该视图重定向到另一个包含更多详细信息的视图

例如:如果我单击的是一家医院,弹出窗口将显示其名称和
ui按钮
按钮。当我点击
ui按钮
按钮时,我应该重定向到另一个视图,该视图提供了该医院的更多信息

我的代码:

-(void)callingMap:(NSArray *)hospitalArray {
 for(Hospital *hospital in hospitalArray)
        {
                MKCoordinateRegion region = { {0.0, 0.0 }, { 0.0, 0.0 } };                 
                region.center.latitude =  hospital.lati;                
                region.center.longitude = hospital.longi;
                [self.mapView setRegion:region animated:YES];               
                DetailMap *hospitalInfo = [[DetailMap alloc] init];             
                hospitalInfo.title = [hospital name];               
                hospitalInfo.subtitle = [hospital address];     
                hospitalInfo.coordinate = region.center;                
                [self.mapView addAnnotation:hospitalInfo];            
        }   
    }    
}


-(MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:
(id <MKAnnotation>)annotation {     
    MKAnnotationView* ann = nil;    
    if(annotation != mapView.userLocation) 
    {
        ann = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"try"];    
        ann.canShowCallout = YES;    
        ann.image = [UIImage imageNamed:@"arrow.png"];        
        UIButton* butt = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];    
        [butt addTarget:self action:@selector(displayArrow:) forControlEvents:     
        UIControlEventTouchUpInside];        
        ann.rightCalloutAccessoryView = butt;    
    }
    return ann;
}

-(void)displayArrow:(id)sender{
        MoreHospitalDetailViewController *mhdvc = [[MoreHospitalDetailViewController alloc] initWithNibName:nil bundle:nil];

        mhdvc.hospitalArray = ????????  

        // in the MoreHospitalDetailViewController i have an Array called hospitalArray. I need to insert the selected hospital object (after clicking the particular arrow)  to this array and pass it to the next view. How to do it ?        // 
        [self.navigationController pushViewController:mhdvc animated:YES];   
}
-(void)callingMap:(NSArray*)hospitalArray{
用于(医院*医院阵列中的医院)
{
MKCoordinateRegion={0.0,0.0},{0.0,0.0};
region.center.lation=hospital.lati;
region.center.longide=hospital.longi;
[self.mapView setRegion:区域动画:是];
DetailMap*hospitalInfo=[[DetailMap alloc]init];
hospitalInfo.title=[医院名称];
hospitalInfo.subtitle=[医院地址];
hospitalInfo.coordinate=region.center;
[self.mapView addAnnotation:hospitalInfo];
}   
}    
}
-(MKAnnotationView*)地图视图:(MKMapView*)mV视图用于说明:
(id)注释{
MKAnnotationView*ann=nil;
if(注释!=mapView.userLocation)
{
ann=[[MKAnnotationView alloc]initWithAnnotation:annotation重用标识符:@“try”];
ann.canShowCallout=是;
ann.image=[UIImage ImageName:@“arrow.png”];
UIButton*butt=[UIButton Button类型:UIButtonTypedTailDisclosure];
[butt addTarget:self action:@selector(displayArrow:)for ControlEvents:
UIControlEventTouchUpInside];
ann.RightCallout附件视图=对接;
}
返回ann;
}
-(无效)显示箭头:(id)发送方{
MoreHospitalDetailViewController*mhdvc=[[MoreHospitalDetailViewController alloc]initWithNibName:nil bundle:nil];
mhdvc.hospitalArray=????????
//在MoreHospitalDetailViewController中,我有一个名为hospitalArray的数组。我需要将选定的医院对象(单击特定箭头后)插入该数组,并将其传递到下一个视图。如何操作?//
[self.navigationController pushViewController:mhdvc动画:是];
}
MoreHospitalDetailViewController
中,我有一个名为
hospitalArray
的数组。我需要将所选的
医院对象
(单击特定箭头后)插入此数组,并将其传递到下一个视图。怎么做

注意:地图中可能有许多项目(注释),因此当我在
(void)displayArrow:(id)sender
方法中时,如何知道我单击了哪个医院对象


帮助我丢失了

显示箭头:
方法中,您可以使用以下方法获取对单击的注释的引用:

DetailMap *hospitalInfo 
    = (DetailMap *)[mapView.selectedAnnotations objectAtIndex:0];

注意:您也可以使用地图视图的
calloutAccessoryControlTapped
委托方法,而不是执行
addTarget
和编写自定义方法。例如:

-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view 
    calloutAccessoryControlTapped:(UIControl *)control
{
    DetailMap *hospitalInfo = (DetailMap *)view.annotation;

    //do something with the annotation...
}

你有两个班:

  • 医院
    包含医院的全部详细信息,包括电话等
  • DetailMap
    它实现了
    MKAnnotation
    ,只包含医院的坐标、名称和地址(但不包括电话或任何其他信息)
点击注释的标注按钮时,您希望访问完整的医院信息(不仅仅是坐标、名称和地址)

首先,当你在评论中说“DetailMap只包含2条记录”时,你真正的意思是“字段”或“属性”,而不是“记录”(每个医院对象都是一条“记录”)

以下是解决此问题的两种方法:

  • DetailMap
    中,添加类型为
    hospital
    的say
    hospital
    属性,并在
    callingMap
    方法(
    hospitalInfo.hospital=hospital
    中创建
    DetailMap
    对象时进行设置。然后在
    显示箭头:
    方法中,可以将该属性添加到数组中(
    mhdvc.hospitalArray=[NSArray arrayWithObject:hospitalInfo.hospital];

  • 更改
    Hospital
    类,使其实现
    MKAnnotation
    本身,并完全消除
    DetailMap
    类。然后,您可以直接将
    Hospital
    对象传递到
    addAnnotation
    ,并在
    displayArrow:
    方法中执行以下操作:

    Hospital *hospital = (Hospital *)[mapView.selectedAnnotations objectAtIndex:0];
    mhdvc.hospitalArray = [NSArray arrayWithObject:hospital];
    
第一个选项更简单,因为您已经创建了
DetailMap
类,但是第二个选项更干净


不过,
morehositalDetailViewController
不需要数组来传递单个医院对象(包含多个字段)。您可以在
MoreHospitalDetailViewController
中声明一个
Hospital*Hospital
属性来传递单个对象。

但我需要的是一个
Hospital
对象数组。那么,如何使用
DetailMap
获取
Hospital
对象的数组呢?请帮助您希望将哪些医院对象传递给MoreHospitalDetailViewController?当用户单击蓝色箭头时,将调用
displayArrow
方法。当他选择一个特定的记录时,我需要将该特定的
hospital
对象添加到NSMutableArray中,然后将其转换为数组并将其传递到
MoreHospitalDetailViewController
的数组中。在
callingMap
方法中,您将看到
Hospital
对象,我正在使用该对象提取细节并显示在注释上。所以w