0

有没有类似的动作:

if (previous_view.title = @"newyork")
{
mapPin.pinColor = MKPinAnnotationColorGreen;
}

if (previous_view.title = @"washington")
{
mapPin.pinColor = MKPinAnnotationColorPurple;
}

我正在创建一个有地图的应用程序,如果您单击图钉的注释,它会导致一个带有按钮图的屏幕,如果我单击它,那么图钉需要更改为不同的颜色,我是想知道是否存在这样的动作,它会基于前一个视图的名称或任何其他属性(它来自哪里)。

这是我按下注释后用于转到下一个屏幕的代码:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
if ([view.annotation.title isEqual: @"New York"])
    {
    newyork *controller1 = [[[newyork alloc] initWithNibName:@"newyork" bundle:nil] autorelease];
    controller1.delegate = self;
    controller1.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentViewController:controller1 animated:YES completion:nil];
    }
}

这是 newyork.m 文件中的代码,它是按下地图按钮时发生的操作:

- (IBAction)mapPressed:(id)sender
{
map *controller1 = [[[map alloc] initWithNibName:@"map" bundle:nil] autorelease];
controller1.delegate = self;
controller1.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentViewController:controller1 animated:YES completion:nil];
}

我真的需要帮助!任何帮助表示赞赏。

4

2 回答 2

3

我假设“视图”是指“视图控制器”。

在那个假设之后。是的,如果您使用 UINavigationController 并将视图控制器推送到该导航控制器上,您可以检查这一点。为此:

UIViewController *previousController = [self.navigationController.viewControllers objectAtIndex:self.navigationController.viewControllers.count - 2];

if ([previousController.title isEqual:@"something"]) {
    // Do Something
}

但这不是建议的方法。您不应该依赖导航控制器堆栈来执行视图控制器上的条件操作。您应该将此参数传递给您的视图控制器,最好是在初始化时。喜欢:

[[SomeViewContoller alloc] initWithStateName:stateName];
于 2013-05-23T16:43:51.743 回答
1

MKAnnotationView类参考

注释视图支持选择状态的概念,它确定视图是未选择、已选择还是已选择并显示标准标注视图。用户通过与注释视图的交互在选择状态之间切换。在未选中状态下,注释视图显示但不突出显示。在选中状态下,注释会突出显示,但标注不会显示。最后,注释可以同时突出显示和标注。标注视图显示附加信息,例如标题字符串和用于查看更多信息的控件。标题信息由注释对象提供,但您的注释视图负责提供任何自定义控件。有关详细信息,请参阅子类化注释。

所以你可以做的是子类MKAnnotationView化并覆盖该-(void)setSelected:animated:方法。

于 2013-05-23T16:47:39.160 回答