1

我有一个 mapview 控制器,它显示来自我创建的一系列业务对象的引脚(每个业务都有一个获取引脚标题和副标题的方法)。

我为每个正常工作的 pin 注释添加了一个披露按钮,但我不确定如何将变量传递到要从披露按钮加载的详细视图,并显示该特定业务的所有详细信息。

我将我的业务添加到这样的数组中(在 viewWillAppear 中)......

// fetch model data for table view
SGTGAppDelegate *appDelegate = (SGTGAppDelegate *)[[UIApplication sharedApplication] delegate];

self.businesses = appDelegate.vaBusinesses;

// Add the business to the map
[self.mapView addAnnotations:self.businesses];

然后我像这样格式化注释......

-(MKAnnotationView *)mapView:(MKMapView *)amapView viewForAnnotation:(id<MKAnnotation>)annotation{
    static NSString *PinIdentifier = @"PinIdentifier";

    //Use default style for user location
    if([annotation isKindOfClass:[MKUserLocation class]])
        return nil;

    //Obtain a pin
    MKPinAnnotationView *pin = (MKPinAnnotationView *) [amapView dequeueReusableAnnotationViewWithIdentifier:PinIdentifier];

    if (pin == nil){
        pin = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:PinIdentifier] autorelease];
    }

    UIButton * detailView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];


    // Configue the pin
    pin.annotation = annotation;
    pin.animatesDrop = NO;
    pin.pinColor = MKPinAnnotationColorRed;
    pin.rightCalloutAccessoryView = detailView;
    pin.canShowCallout = YES;

    return pin;
}

然后我有这种方法来处理披露按钮,但不知道在这里做什么来获取业务的 id 以传递到详细视图...

-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
    NSLog(@"annotation %@", view.annotation[0]);
    // Fetch the businesses for this row

    // not sure what to do here
    //SGTGVABusiness *business = [self.businesses objectAtIndex:[view.annotation]];

    // Show the detail view by pushing it onto the navigation stack
    SGTGVADetailViewController *dvc = [[SGTGVADetailViewController alloc] initWithStyle:UITableViewStyleGrouped];
    //dvc.business = business;
    [self.navigationController pushViewController:dvc animated:YES];
    [dvc release];

}
4

2 回答 2

3

这里真正需要定制的是注解。从注释视图到注释,您没有任何问题;问题是注释没有提供信息。您要做的是创建自己的注释类,一个实现 MKAnnotation 协议的 NSObject 子类,如下所示:

@interface MyAnnotation : NSObject <MKAnnotation>
@property (nonatomic) CLLocationCoordinate2D coordinate;
@property (nonatomic, copy) NSString *title, *subtitle;
- (id)initWithLocation:(CLLocationCoordinate2D)coord;
@end

@implementation MyAnnotation
- (id)initWithLocation: (CLLocationCoordinate2D) coord {
    self = [super init];
    if (self) {
        self->_coordinate = coord;
    }
    return self;
}
@end

这是最小的,但现在你可以扩展它。特别是,您可以添加另一个属性来存储有关此注释的额外信息。当您创建注释并将其添加到地图时,您将创建此类的一个实例并为其分配您稍后需要获取的信息。

我的书深入讨论了这一点:

http://www.aeth.com/iOSBook/ch34.html#_annotations

你可以下载一个开发这个概念的工作项目:

https://github.com/mattneub/Programming-iOS-Book-Examples/tree/master/ch34p848map/p707p723map

于 2013-03-21T17:33:15.200 回答
0

您可以继承 MKAnnotationView 并创建一个将保存 ID 的属性。

于 2013-03-21T17:17:45.163 回答