按下另一个屏幕上的按钮后,更改地图上的图钉颜色

时间:2013-05-21 19:28:14

标签: iphone ios xcode annotations mkmapview

enter image description here enter image description here enter image description here

我需要找到一种方法来通过从另一个屏幕按下按钮来加载地图时更改引脚颜色。

例如,原始针脚都是红色的,但是当我转到页面并按下地图按钮时,它必须将我引导到地图视图,并且该位置的坐标必须用绿色针标记。

我已经设置了地图并设置了将引脚全部设为红色。

感谢任何帮助。

所以,回顾一下: 带红色图钉的地图页面 - >点击图钉,点击注释(另一个视图打开) - >在内部视图中,有一个按钮(例如@“更改引脚颜色”),单击按钮 - >带绿色图钉的地图页面打开。 (用图片查看上面的例子。)

2 个答案:

答案 0 :(得分:0)

您应该做的是更改代表该引脚的数据中的内容。注释。当您切换回地图时,将重新绘制注释,并且将调用viewForAnnotation方法,此时您将检查属性并绘制正确的颜色。

答案 1 :(得分:0)

为什么不直接声明一个新的构造函数来设置你选择的颜色?

// ViewControllerB .h file
@interface ViewControllerB
{
    UIColor *pinColor;
}

-(id)initWithPinColor:(UIColor *)chosenPinColor;

...

// ViewControllerB .m file
-(id)initWithPinColor:(UIColor *)chosenPinColor
{
    self = [super init];

    if(self)
    {
        pinColor = chosenPinColor;
    }

    return self;
}

...

-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
    if([annotation isKindOfClass:[MKUserLocation class]])
    {
        return nil;
    }

    static NSString *annotationViewID = @"annotationViewID";

    MKPinAnnotationView *annotationView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:annotationViewID];

    if(!annotationView)
    {
        annotationView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:annotationViewID] autorelease];
    }

    // this will use the pinColor stored in the constructor
    annotationView.pinColor = pinColor;        
    annotationView.canShowCallout = YES;
    annotationView.animatesDrop = YES;

    annotationView.annotation = annotation;

    return annotationView;
}

然后你可以在ViewControllerA中执行此操作:

// ViewControllerA .m file
#import "ViewControllerB.h"

...

-(void)showMapWithPinColor:(id)sender
{
    ViewControllerB *vc = [[ViewControllerB alloc] initWithPinColor:[UIColor green]];

    [self.navigationController pushViewController:vc animated:YES];
}