2010-12-30 9 views
0

Ich übergebe ein NSArray, das Objekte enthält, an einen Bildschirm, auf dem die Objekteigenschaften in einer Tabelle angezeigt werden. Jedes dieser Objekte enthält eine latitude-Eigenschaft und eine longitude-Eigenschaft. Ich möchte eine Funktionalität implementieren, bei der der Benutzer eine Zelle auswählt (wobei jede Zelle ein Objekt aus dem NSArray darstellt) und der Benutzer dann zu einem anderen Bildschirm weitergeleitet wird, wo er eine Anmerkung sehen kann, die den Standort des Objekts auf einer Karte darstellt. und eine Anmerkung, die den Benutzer darstellt. Wie mache ich das? Hier ist mein entsprechender Code aus meiner RootViewController.m Klasse:Wie zeige ich einen Ort aus einer Tabelle auf einer Karte auf dem nächsten Bildschirm an?

SecondViewController *controller = [[SecondViewController alloc] initWithNibName:@"SecondView" bundle:[NSBundle mainBundle]]; 
     self.secondViewController = controller; 
     [controller release]; 

     self.secondViewController.locationList = sortedLocations; 

     [[self navigationController] pushViewController:controller animated:YES]; 

Mein entsprechender Code in SecondViewController.m wie folgt aussieht:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

static NSString *CellIdentifier = @"locationcell"; 

LocationTableViewCell *cell = (LocationTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
cell = [[[LocationTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
} 

Location *location = [locationList objectAtIndex:indexPath.row]; 
cell.locationName.text = location.name; 
cell.locationAddress.text = location.address; 
cell.locationDistance.text = location.distance; 

return cell; 
} 

Bitte beachten Sie, dass die sichtbaren Eigenschaften Name sind, Adresse, und Entfernung, aber das Standortobjekt enthält auch Breiten- und Längengradeigenschaften. Ich weiß, dass ich einen neuen Bildschirm namens MapViewController erstellen muss. Aber wie gesagt, ich bin mir nicht sicher, wohin ich von der Tabelle auf dem Bildschirm zu einer Karte gehen soll, die das Standortobjekt und den Benutzer zeigt.

Antwort

0

Erstellen Sie einen neuen ViewController mit MapView und übergeben Sie den neuen Längen- und Breitengradwert an den neuen ViewController.

Angenommen, Sie haben den View-Controller als MyLocationMapViewController erstellt.

In SecondViewController.m implementieren die folgenden

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    Location *location = [locationList objectAtIndex:indexPath.row]; 
    [self.navigationController pushViewController:[[MyLocationMapViewController alloc] initWithLocation:location] animated:YES]; 
} 

in MyLocationMapViewController.h

  • (id) initWithLocation: (Ort *) Lage;

in MyLocationMapViewController.m

  • (id) initWithLocation: (Ort *) Lage { * locationObj = location;

}

Jetzt können Sie die locationObj verwenden, um die Kartenwerte für das Abrufen und die Koordinaten in MapView angezeigt werden soll.

+0

Vielen Dank für Ihre schnelle Antwort. Ich hatte eine Follow-up-Frage für dich. Welcher Typ ist * locationObj? Das wirft mich ab. Nochmals vielen Dank für Ihre Zeit und Geduld. – syedfa

+0

In der Datei MyLocationMapViewController.h. Ort erstellen * locationObj. Legen Sie @property für die Location-Variable fest. Hoffe es ist jetzt klar. – Swapna

+0

Vielen Dank für Ihre schnelle Antwort. Ich hatte noch eine weitere Frage. Als ich die MyLocationMapViewController-Klasse erstellt habe, wurde die relevante .xib-Datei von xcode nicht für mich erstellt. Wenn ich meine eigene .xib-Datei erstellen soll, wie würde ich sie mit der MyLocationMapViewController-Klasse verknüpfen? Ich entschuldige mich, aber ich bin sehr neu in der iPhone-Entwicklung. Danke nochmal für deine Hilfe. – syedfa

0

erstellen MapViewController Objekt in secondview Controller

den Code unten in Ihrem secondview Controller

  • (void) tableview schreiben: (UITableView *) tableview DidSelectRowAtIndexPath: (NSIndexPath *) indexPath {

    MapViewController * mapView = [MapViewController Alloc] initWithNibName: @ "MapViewController" Bundle: [NSBundle mainBundle]];

    self. mapView = controller; 
    [mapView release]; 
    
    
    self.mapView.latit = location.latitude; 
    self.mapView.longi = location.longitude; 
    [[self navigationController] pushViewController:controller animated:YES]; 
    

    }

erstellen 2 Doppel Variablen Breite Eingabe und longi in MapViewController genannt geografischen Breite und Länge speichern

+0

Vielen Dank, dass Sie sich die Zeit genommen haben, meine Frage zu beantworten! – syedfa