gpt4 book ai didi

iphone - 添加 UIButtonTypeDetailDisclosure - 逻辑问题

转载 作者:行者123 更新时间:2023-12-03 21:04:05 25 4
gpt4 key购买 nike

我添加了annotaion pin point to my application ,当用户单击图钉时,会出现带有蓝色箭头的弹出窗口 (UIButtonTypeDetailDisclosure)。现在我想做的是,当用户单击它时,我需要将 View 重定向到另一个 View ,并提供更多详细信息。

例如:如果我点击的是一家医院,弹出窗口将给出其名称和 UIButtonTypeDetailDisclosure 按钮。当我单击 UIButtonTypeDetailDisclosure 按钮时,我应该重定向到另一个 View ,其中提供有关该医院的更多信息。

我的代码:

-(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];
}

MoreHospitalDetailViewController 中,我有一个名为 hospitalArray 的数组。我需要将选定的医院对象(单击特定箭头后)插入到该数组中并将其传递到下一个 View 。怎么做?

注意: map 中可以有很多项目(注释),那么当我在 (void)displayArrow:(id)sender 方法中时,如何知道我单击了哪个医院对象?

救救我,我迷路了

最佳答案

displayArrow:方法,您可以使用以下方法获取对单击的注释的引用:

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


请注意,您还可以使用 map View 的 calloutAccessoryControlTapped委托(delegate)方法而不是addTarget并编写自定义方法。例如:

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

//do something with the annotation...
}

<小时/>您有两个类(class):

  • Hospital其中包含医院的完整详细信息,包括电话号码等。
  • DetailMap它实现了 MKAnnotation仅包含医院的坐标、名称和地址(但不包含电话# 或其他任何信息)

点击注释的标注按钮时,您希望访问完整的医院信息(而不仅仅是坐标、名称和地址)。

首先,当您在注释中说“DetailMap 仅包含 2 条记录”时,您实际上指的是“字段”或“属性”而不是“记录”(每个医院对象都是一个“记录”)。

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

  • DetailMap ,添加一个名为 hospital 的属性类型 Hospital并在创建DetailMap时设置callingMap 中的对象方法(hospitalInfo.hospital = hospital)。然后在 displayArrow:方法,您可以将该属性添加到数组 ( 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类,但第二个更干净。

不过,MoreHospitalDetailViewController不需要数组来传递单个医院对象(包含多个字段)。你可以只声明 Hospital *hospital属性(property) MoreHospitalDetailViewController传递单个对象。

关于iphone - 添加 UIButtonTypeDetailDisclosure - 逻辑问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9114580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com