iPhone:使用关闭按钮将视图用作透明叠加层

时间:2010-05-27 14:19:06

标签: iphone objective-c cocoa-touch

我有一个带有三个条形按钮的地图,可以显示不同的标记。如果我单击一个条形按钮,则特定标记将显示在地图中,该标记已经很好用。

现在我想显示一个透明的覆盖图(弹出窗口),其中包含标记的描述,我点击一个带有按钮的条形按钮,再次关闭覆盖图并显示标记(在背景中设置)。

条形按钮的功能:

- (IBAction)routeTwo:(id)sender
{
    // The code for the overlay
    // ...

    // remove any annotations that exist
    [map removeAnnotations:map.annotations];  

    // Add any annotations which belongs to route 2
    [map addAnnotation:[self.mapAnnotations objectAtIndex:2]];
    [map addAnnotation:[self.mapAnnotations objectAtIndex:3]];
    [map addAnnotation:[self.mapAnnotations objectAtIndex:4]];
    [map addAnnotation:[self.mapAnnotations objectAtIndex:5]];
}

我尝试了以下可能性:

1。使用模态视图控制器

RouteDescriptionViewController *routeDescriptionView = [[RouteDescriptionViewController alloc] init];
    [self presentModalViewController:routeDescriptionView animated:YES];
    [routeDescriptionView release];

效果很好,但问题是:背景中的地图视图不再可见(配置模态视图的alpha值不会改变任何东西)。

2。将RouteDescriptionView添加为子视图

RouteDescriptionViewController *routeDescriptionView = [[RouteDescriptionViewController alloc] init];
    [self.view addSubview:routeDescriptionView.view];
    [routeDescriptionView release];

效果也不错,但问题在于:我无法在子视图上配置关闭按钮来关闭/删除子视图(RouteDescriptionView)。

第3。使用UIAlertView

会按预期工作,但UIAlert不是真正可定制的,因此不适合我的需要。

任何想法如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

如果你选择选项2,你可以添加一个UIButton实例作为routeDescriptionView的子视图,并将该按钮连接到routeDescriptionView的removeFromSuperview方法。

例如,在RouteDescriptionViewController的loadView或viewDidLoad方法中:

UIButton *closeButton = [UIButton buttonWithType:UIButtonTypeCustom];
[closeButton setImage:[UIImage imageNamed:@"close.png"] forState:UIControlStateNormal];
[closeButton addTarget:[self view] action:@selector(removeFromSuperview) forControlEvents:UIControlEventTouchUpInside];
[[self view] addSubview:closeButton];