2016-07-13 6 views
1

Ich habe einen Array-Inhalt von CLLocationcooridinate2d und Standortdetails. Und ich lege es mit Uibutton in die Tabellenansichtszelle, was ich gerade versuche, die spezifische Zelleninformation von Uibuttom zu übergeben und eine neue Ansicht der Kartenansicht zu starten und mit der Navigation zu beginnen. Hier ist mein Code:Uibutton zum Übergeben von Standortinformationen und Starten der Navigation auf der Karte in swift

var tripspot:[tripSpot] = [ 
    tripSpot(title: "一中商圈", coordinate: CLLocationCoordinate2DMake(24.149062, 120.684891), regionRadius: 300.0, location: "台中市北區一中街", type: "Food",cllocation:CLLocation(latitude: 24.181143, longitude: 120.593158)) 


func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("MapCell") as! mapTableViewCell 
    if searchController.active{ 
    cell.title.text = searchResults[indexPath.row].title 
    cell.location.text = searchResults[indexPath.row].location 
    cell.naviButton.tag = indexPath.row 
    cell.naviButton.addTarget(self, action: Selector("tapDidNavi"), forControlEvents: .TouchUpInside) 

    return cell 
    }else{ 
    cell.title.text = tripspot[indexPath.row].title 
    cell.location.text = tripspot[indexPath.row].location 
    cell.naviButton.tag = indexPath.row 
    cell.naviButton.addTarget(self, action: Selector("tapDidNavi"), forControlEvents: .TouchUpInside) 
    print(cell.naviButton.tag.description) 
    return cell 
    } 


} 

@IBAction func tapDidNavi(sender: UIButton){ 



} 

danke für jeden Hinweis!

+0

Ich denke, Sie müssen ein bisschen mehr Details zur Verfügung stellen. Welche Informationen müssen Sie an die Kartenansicht übergeben? Ist diese Mapview im selben View-Controller oder werden Sie eine neue MapView erstellen? – mlidal

+0

Sorry für meine Frage nicht klar zu beschreiben, habe ich einen Array-Inhalt von CLLocationcooridinate2d und Ort Details. Und ich lege es mit Uibutton in die Tabellenansichtszelle, was ich gerade versuche, die spezifische Zelleninformation von Uibuttom zu übergeben und eine neue Ansicht der Kartenansicht zu starten und mit der Navigation zu beginnen. –

+0

Können Sie die Deklaration des von Ihnen erwähnten "Array-Inhalts von CLLocationCoordinate2D und Standortdetails" anzeigen? –

Antwort

3

Sie können MKMapItem.openMapsWithItems:launchOptions: aufrufen verwenden Turn-by-Turn-Navigation in der Maps-App zu starten.

Aus der Dokumentation:

Wenn Sie die MKLaunchOptionsDirectionsModeKey Option im launchOptions Wörterbuch angeben, die mapItems Array nicht mehr als zwei Elemente darin haben müssen. Wenn das Array ein Element enthält, generiert die Karten-App Routen vom aktuellen Standort des Benutzers an den vom Kartenelement angegebenen Speicherort . Wenn das Array zwei Elemente enthält, generiert die App "Maps " Richtungen vom Ort des ersten Objekts zum Standort des zweiten Elements im Array.

@IBAction func tapDidNavi(sender: UIButton){ 

    let location = self.tripspot[sender.tag] 

    let placemark = MKPlacemark(
     coordinate: coordinate, 
     addressDictionary: nil 
    ) 

    let mapItem = MKMapItem(placemark: placemark) 
    mapItem.name = location.title 

    let options = [ 
     MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving 
    ] 

    MKMapItem.openMapsWithItems([mapItem], launchOptions: options) 
} 
+0

Danke dir @Luke das ist was ich brauche! Wie kann ich den unbekannten Ort mit dem Titel meines Arrays ändern? –

+0

Sie können den Titel, die Adresse und andere festlegen, indem Sie ein Wörterbuch an die Ortsmarke 'addressDictionary' übergeben. Informationen zu den verfügbaren Schlüsseln finden Sie in der Dokumentation zu [ABPerson] (https://developer.apple.com/library/ios/documentation/AddressBook/Reference/ABPersonRef_iPhoneOS/index.html#//apple_ref/doc/uid/TP40007210). Wenn Sie Ihre Frage aktualisieren, um anzuzeigen, wie Sie diese Informationen speichern, z.die Datenstruktur, die die Koordinate und den Titel des Ortes hat, dann werde ich meine Antwort mit einem Beispiel aktualisieren, wie dies zu tun ist. –

+0

Schätze @Luke Ich habe meine gespeicherten Informationen hinzugefügt. –

1

Ich verstehe nicht wirklich über Ihr Problem. Vielleicht ist Ihre Frage nicht spezifisch. Wenn die Tastenaktion jedoch nicht funktioniert. Sie können dies tun;

protocol ButtonDelegate { 
func buttonPressedOnIndexPath(indexPath : NSIndexPath) 
} 

extension ViewController : UITableViewDataSource { 
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 1 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("TableViewCell") as! TableViewCell 

    cell.indexPath = indexPath 
    cell.delegate = self 
    return cell 
} 

extension ViewController : ButtonDelegate { 
func buttonPressedOnIndexPath(indexPath: NSIndexPath) { 
    //use the indexpath.row for the array 
    print("indexPath : \(indexPath.row)") 
}} 

class TableViewCell: UITableViewCell { 
    var delegate : ButtonDelegate! 
    var indexPath : NSIndexPath! 

    @IBOutlet weak var naviButton: UIButton! 

    @IBAction func buttonPressed(sender: UIButton) { 
     delegate.buttonPressedOnIndexPath(indexPath) 
    } 
} 

Ich hoffe, es hilft

1

Es kann einige Vorschläge in dieser Frage SO sein: Passing parameters on button action:@selector

Wie Sie die tag Eigenschaft auf dem UIButton eingestellt haben Sie diesen Parameter in tapDidNavi und diese nutzen zugreifen können um die CLLocationCoordinate2D aus dem Array zu erhalten.

Was Sie als Nächstes tun, hängt davon ab, wie Sie Ihre App eingerichtet haben. Wenn Sie z.B. haben die mapview in einem anderen Viewcontroller und eine segue einrichten Sie

performSegueWithIdentifier("identifer", sender: <CLLocationCoordinate2D object>) 
1

diesen Code versuchen, werden AppleMap mit den Richtungen öffnen, markiert von der aktuellen Position des Geräts auf die Position der Koordinaten angegeben.

let coordinate = CLLocationCoordinate2DMake(currentLat, currentLong) 
    let mapItem = MKMapItem(placemark: MKPlacemark(coordinate: coordinate, addressDictionary:nil)) 
    mapItem.name = “Destination/Target Address or Name” 
    mapItem.openInMapsWithLaunchOptions([MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeDriving])