读书频道 > 网站 > 网页设计 > iOS 5编程入门经典(第3版)——开发iPhone与iPad应用
20.2.7 显示箭头按钮
12-11-08    奋斗的小年轻
收藏    我要投稿   
本书面向iPhone和iPad开发初学者,涵盖了iOS开发的各个主题。本书的编写方式是渐进式的,这样读者就不会由于细节过多而疲于奔命。我认为最好的学习方式就是去实践,因此全书大量的试一试首先会介绍如何构建某个应...立即去当当网订购

在地图上显示注记时,通常会向用户提供一个选择注记的选项,以便他们可以看到关于该位置的更多信息。例如,用户可能需要知道位置的详细地址,或者可以借此提供所选位置的路线信息。在Map Kit框架中,可以通过一个箭头按钮来添加这种选项。下面的“试一试”演示了如何在注记中显示箭头按钮。

 试一试       显示箭头按钮

(1) 继续使用LBS项目,在LBSViewController.m文件中添加如下方法:
- (MKAnnotationView *)mapView:(MKMapView *)aMapView
            viewForAnnotation:(id)ann {
   
    NSString *identifier = @"myPin";
    MKPinAnnotationView *pin = (MKPinAnnotationView *)
    [aMapView dequeueReusableAnnotationViewWithIdentifier:identifier];
    if (pin == nil) {
         pin = [[[MKPinAnnotationView alloc] initWithAnnotation:ann
                                               reuseIdentifier:identifier]
                  autorelease];
    } else {
        pin.annotation = ann;
    }
   
    //---display a disclosure button on the right---
    UIButton *myDetailButton =
    [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    myDetailButton.frame = CGRectMake(0, 0, 23, 23);
    myDetailButton.contentVerticalAlignment =
    UIControlContentVerticalAlignmentCenter;
    myDetailButton.contentHorizontalAlignment =   
    UIControlContentHorizontalAlignmentCenter;
   
    [myDetailButton addTarget:self
action:@selector(checkButtonTapped:)
               forControlEvents:UIControlEventTouchUpInside];
   
    pin.rightCalloutAccessoryView = myDetailButton;
    pin.enabled = YES;
    pin.animatesDrop=TRUE;
    pin.canShowCallout=YES;
   
    return pin;
}

-(void) checkButtonTapped:(id) sender {
    //---know which button was clicked;
    // useful for multiple pins on the map---
    // UIControl *btnClicked = sender;
    UIAlertView *alert =
[[UIAlertView alloc] initWithTitle:@"Your Current Location"
                                   message:location
                                   delegate:self
                         cancelButtonTitle:@"OK"
                         otherButtonTitles:nil];
    [alert show];
    [alert release];   
}

(2) 按Command+R组合键,在iPhone Simulator中测试应用程序。现在,Annotation视图的右侧会显示一个箭头按钮,如图20-24所示。单击该按钮会显示一个Alert视图。


 

示例说明

每次在地图上添加注记时都会触发“mapView:viewFor- Annotation:”方法(在MKMapViewDelegate协议中定义),前面所做的就是重写该方法。

注意下面的代码块:
    NSString *identifier = @"myPin";
    MKPinAnnotationView *pin = (MKPinAnnotationView *)
    [aMapView dequeueReusableAnnotationViewWithIdentifier:identifier];
    if (pin == nil) {
        pin = [[[MKPinAnnotationView alloc] initWithAnnotation:ann
                                               reuseIdentifier:identifier]
                 autorelease];
    } else {
        pin.annotation = ann;
    }

这段代码尝试重用任何当前在屏幕上不可见的注记对象。假设地图上有10 000个注记,在内存中维护MKPinAnnotationView对象并不可行(因为占用的内存太大)。因此,这段代码尝试重用当前在屏幕上不可见的MKPinAnnotationView对象。

下面的代码块用于在注记的旁边显示一个箭头按钮:
    //---display a disclosure button on the right---
    UIButton *myDetailButton =
    [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    myDetailButton.frame = CGRectMake(0, 0, 23, 23);
    myDetailButton.contentVerticalAlignment =
    UIControlContentVerticalAlignmentCenter;
    myDetailButton.contentHorizontalAlignment =   
    UIControlContentHorizontalAlignmentCenter;
   
    [myDetailButton addTarget:self
                           action:@selector(checkButtonTapped:)
                forControlEvents:UIControlEventTouchUpInside];
   
    pin.rightCalloutAccessoryView = myDetailButton;
    pin.enabled = YES;
    pin.animatesDrop=TRUE;
    pin.canShowCallout=YES;

单击箭头按钮时,会触发“checkButtonTapped:”方法:
-(void) checkButtonTapped:(id) sender {
    //---know which button was clicked;
    // useful for multiple pins on the map---
    // UIControl *btnClicked = sender;
    UIAlertView *alert =
    [[UIAlertView alloc] initWithTitle:@"Your Current Location"
message:location
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
    [alert show];
    [alert release];   

在本例中,只是简单地显示了一个Alert视图,不过也可以显示另一个View窗口来揭示更详细的信息。

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站