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