gpt4 book ai didi

ios - 如何从 map 图钉上的披露按钮调用 segue?

转载 作者:行者123 更新时间:2023-12-01 19:10:38 24 4
gpt4 key购买 nike

我有一个在 map View 上绘制图钉的应用程序。

每个引脚都使用此代码显示详细信息披露按钮,点击该按钮时会调用 showDetail 方法,该方法随后会调用 prepareForSegue 方法。我认为这里有很多额外的工作。

我应该消除 showDetail 并只调用 prepareForSegue 方法吗?但是我将如何传递 MyLocation 对象?

这是代码:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
static NSString *identifier = @"MyLocation";
if ([annotation isKindOfClass:[MyLocation class]]) {

//test if mapviewnil
if (_mapView == nil) {
NSLog(@"NIL");
}
MKPinAnnotationView *annotationView = (MKPinAnnotationView *) [_mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
if (annotationView == nil) {
annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
} else {
annotationView.annotation = annotation;
}

annotationView.enabled = YES;
annotationView.canShowCallout = YES;
annotationView.image=[UIImage imageNamed:@"locale.png"];


//instatiate a detail-disclosure button and set it to appear on right side of annotation
UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[infoButton addTarget:self action:@selector(showDetailView:annotation:) forControlEvents:UIControlEventTouchUpInside];
annotationView.rightCalloutAccessoryView = infoButton;

return annotationView;
}

return nil;
}

-(void)showDetailView:(id <MKAnnotation>)annotation{

//Set the data
MyLocation *sendingLocation = annotation;

DetailViewController *destinationViewController = segue.destinationViewController;
destinationViewController.receivedLocation = sendingLocation;
[self performSegueWithIdentifier: @"DetailVC" sender: self];

}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([segue.identifier isEqualToString:@"DetailVC"]) {
NSLog(@"DetailVC called");
} else {
NSLog(@"PFS:something else");
}
}

提前谢谢!

最佳答案

通常您不会为按钮添加目标,而只需设置 rightCalloutAccessoryView (就像你一样)然后写一个 calloutAccessoryControlTapped 方法,例如:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
static NSString *identifier = @"MyLocation";
if ([annotation isKindOfClass:[MyLocation class]]) {

MKPinAnnotationView *annotationView = (MKPinAnnotationView *) [mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
if (annotationView == nil) {
annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
annotationView.enabled = YES;
annotationView.canShowCallout = YES;
annotationView.image = [UIImage imageNamed:@"locale.png"]; // since you're setting the image, you could use MKAnnotationView instead of MKPinAnnotationView
annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
} else {
annotationView.annotation = annotation;
}

return annotationView;
}

return nil;
}

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
if (![view.annotation isKindOfClass:[MyLocation class]])
return;

// use the annotation view as the sender

[self performSegueWithIdentifier:@"DetailVC" sender:view];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(MKAnnotationView *)sender
{
if ([segue.identifier isEqualToString:@"DetailVC"])
{
DetailViewController *destinationViewController = segue.destinationViewController;

// grab the annotation from the sender

destinationViewController.receivedLocation = sender.annotation;
} else {
NSLog(@"PFS:something else");
}
}

关于ios - 如何从 map 图钉上的披露按钮调用 segue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16825496/

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