Hallo zusammen,
ich hab da mal ne Frage zum Thema MapView und mehreren Pins, bei der Ihr mir hoffentlich helfen könnt.
Also, ich habe eine Reihe an Koordinaten, bzw. locations, die ich auf der Karte darstelle.
Ich füge jedem Pin eine Annotation zu. Der jeweilige Name/Titel wird auch angezeigt. Ich füge jeder Annotation auch einen Button zu, der angezeigt wird.
Soweit so gut.
Wenn ich nun den Button anklicke, soll eine Beschreibung der jeweiligen location angezeigt werden.
Mein Problem liegt nun eigentlich darin zu unterscheiden, welcher Pin/location/Item angeklickt wurde. Ich brauche die jeweilige itemId, die ich dann weitergeben kann, damit ich den richtigen Inhalt (in einer neuen View) laden/darstellen kann.
Ich habe versucht dem Button einen Tag hinzu zu fügen, der die jeweilige itemId ist, aber bekomme immer nur 0 und habe keine Ahnung, wie ich es sonst bewerkstelligen soll
Ich füge mal hier meinen Code bei und vielleicht kann mir ja jemand helfen und sagen, wo mein Denkfehler oder sonstiges ist.
Klasse fuer Annotation:
Alles anzeigen
Klasse fuer MapView
Alles anzeigen
Falls mir jemand irgendwie helfen kann wäre ich überaus dankbar.
MfG,
wasa71
ich hab da mal ne Frage zum Thema MapView und mehreren Pins, bei der Ihr mir hoffentlich helfen könnt.
Also, ich habe eine Reihe an Koordinaten, bzw. locations, die ich auf der Karte darstelle.
Ich füge jedem Pin eine Annotation zu. Der jeweilige Name/Titel wird auch angezeigt. Ich füge jeder Annotation auch einen Button zu, der angezeigt wird.
Soweit so gut.
Wenn ich nun den Button anklicke, soll eine Beschreibung der jeweiligen location angezeigt werden.
Mein Problem liegt nun eigentlich darin zu unterscheiden, welcher Pin/location/Item angeklickt wurde. Ich brauche die jeweilige itemId, die ich dann weitergeben kann, damit ich den richtigen Inhalt (in einer neuen View) laden/darstellen kann.
Ich habe versucht dem Button einen Tag hinzu zu fügen, der die jeweilige itemId ist, aber bekomme immer nur 0 und habe keine Ahnung, wie ich es sonst bewerkstelligen soll
Ich füge mal hier meinen Code bei und vielleicht kann mir ja jemand helfen und sagen, wo mein Denkfehler oder sonstiges ist.
Klasse fuer Annotation:
Quellcode
- @interface DisplayMap : NSObject <MKAnnotation> {
- CLLocationCoordinate2D coordinate;
- NSString *title;
- NSString *subtitle;
- NSString *itemId;
- }
- @property (nonatomic, assign) CLLocationCoordinate2D coordinate;
- @property (nonatomic, copy) NSString *title;
- @property (nonatomic, copy) NSString *subtitle;
- @property (nonatomic, copy) NSString *itemId;
- @end
- #import "DisplayMap.h"
- @implementation DisplayMap
- @synthesize coordinate,title,subtitle, itemId;
- @end
Klasse fuer MapView
Quellcode
- #import <UIKit/UIKit.h>
- #import <MapKit/MapKit.h>
- #import "Item.h"
- @interface MapViewController : UIViewController <MKMapViewDelegate> {
- MKMapView *mapView;
- NSArray *items;
- Item *item;
- }
- @property NSArray *items;
- @property (nonatomic) IBOutlet MKMapView *mapView;
- @end
- #import "MapViewController.h"
- #import "DisplayMap.h"
- @interface MapViewController ()
- @end
- @implementation MapViewController
- @synthesize mapView, items;
- - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
- {
- self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
- if (self) {
- // Custom initialization
- }
- return self;
- }
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- // Do any additional setup after loading the view from its nib.
- [mapView setMapType:MKMapTypeStandard];
- [mapView setZoomEnabled:YES];
- [mapView setScrollEnabled:YES];
- [mapView setDelegate:self];
- CLLocationCoordinate2D location;
- item = [[Item alloc] init];
- DisplayMap *ann;
- for (int i = 0; i < [items count]; i++) {
- //items = Array aus Objekten item
- item = [items objectAtIndex:i];
- // entferne Leerzeichen, Zeilenumbruch und html tags, die vorhanden sind
- item.x = [self stringByStrippingHTML:item.x];
- item.x = [self removeWhiteSpace:item.x];
- [item.x stringByReplacingOccurrencesOfString:@"\n" withString:@""];
- item.y = [self stringByStrippingHTML:item.y];
- item.y = [self removeWhiteSpace:item.y];
- [item.y stringByReplacingOccurrencesOfString:@"\n" withString:@""];
- location.latitude = [item.x doubleValue];
- location.longitude = [item.y doubleValue];
- ann = [[DisplayMap alloc] init];
- ann.title = item.name;
- ann.itemId = item.id;
- ann.coordinate = location;
- [mapView addAnnotation:ann];
- }
- }
- - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
- {
- MKAnnotationView* annotationView = nil;
- DisplayMap *csAnnotation = (DisplayMap*)annotation;
- NSString* identifier = @"Pin";
- MKPinAnnotationView* pin = (MKPinAnnotationView*)[self.mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
- if(nil == pin)
- {
- pin = [[MKPinAnnotationView alloc] initWithAnnotation:csAnnotation reuseIdentifier:identifier];
- }
- pin.pinColor = MKPinAnnotationColorGreen;
- UIButton *button = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
- pin.rightCalloutAccessoryView = button;
- annotationView = pin;
- [annotationView setEnabled:YES];
- [annotationView setCanShowCallout:YES];
- return annotationView;
- }
- - (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
- {
- NSLog(@"calloutAccessoryControlTapped");
- DisplayMap* annotation = (DisplayMap*) annotation;
- NSLog(@"itemId: %@", annotation.itemId);
- }
Falls mir jemand irgendwie helfen kann wäre ich überaus dankbar.
MfG,
wasa71
