2013-03-21 3 views
1

У меня есть контроллер mapview, который показывает контакты из массива бизнес-объектов, которые я создал (в каждом бизнесе есть способ получить заголовок и субтитры вывода).добавить id в pin ​​аннотацию в объекте c для загрузки detailview

Я добавил кнопку раскрытия для каждой условной аннотации, которая работает правильно, но я не уверен, как передать переменную в подробный вид, который должен быть загружен из кнопки раскрытия, и показать все детали для этого конкретного бизнес.

добавить свои предприятия к массиву, как это (в 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; 
} 

Я тогда этот метод обрабатывать кнопку раскрытия, но не уверены, что делать, чтобы получить идентификатор бизнеса, чтобы перейти на подробный вид ...

-(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]; 

} 

ответ

3

Что нужно для настройки здесь, это аннотация. У вас нет никаких проблем с представлением аннотации к аннотации; проблема в том, что аннотация неинформативна. То, что вы хотите сделать, это создать свой собственный класс аннотаций, подкласс NSObject, который реализует протокол MKAnnotation, например:

@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.apeth.com/iOSBook/ch34.html#_annotations

И вы можете скачать рабочий проект, который развивает эту мысль:

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

0

Вы можете подклассифицировать MKAnnotationView и создать свойство, которое будет содержать идентификатор.