2017-03-15 2 views
0

ich eine tableViewCell haben, die den folgenden CodeKnopf in TableViewCell gehen offen Maps App

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    var tr: newTracks! 
    if inSearchMode { 
     tr = filteredTrack[indexPath.row] 
    } else { 
     tr = items[indexPath.row] 
    } 
    let coordinate = CLLocationCoordinate2DMake(tr.lat,tr.lon) 
    let mapItem = MKMapItem(placemark: MKPlacemark(coordinate: coordinate, addressDictionary:nil)) 
    mapItem.name = tr.name 
    mapItem.openInMaps(launchOptions: [MKLaunchOptionsDirectionsModeKey :MKLaunchOptionsDirectionsModeDriving]) 
    } 

die tr variable Links auf eine Struktur hat ich habe, dass verschiedene Daten über eine Website, einschließlich der Breiten- und Längen sammelt. Das funktioniert großartig, wenn ich eine Zeile aus meiner Tabellenansicht auswähle, öffnet sie die Apfelkarten und zeichnet eine Route vom aktuellen Standort zum Zeilenstandort auf.

Was ich tun möchte, ist eine Schaltfläche auf der orten genannt tableviewcell zu implementieren, dass nur dann, wenn Sie die Taste drücken, tut es offen Apfel Karten und plotten, wie oben die Strecke.

Könnte jemand mir helfen, zu verstehen, wie die Schaltfläche implementieren und wo mein Code gehen muss.

Antwort

1

Eine Möglichkeit ist, dass Sie den Verschluss verwenden können. Hier ist der Beispielcode.

  1. In CustomTableViewCell haben wir Abschluss und Ziel für Schaltfläche hinzugefügt. Wenn die Taste gedrückt wird, wird der Abschluss aufgerufen.

Klasse CustomTableViewCell: UITableViewCell {

@IBOutlet weak var button: UIButton! 

var completion: ((Void) -> Void?)? 

override func awakeFromNib() { 
    button.addTarget(self, action: #selector(didTappedButton), for: .touchUpInside) 
} 

func didTappedButton() { 
    if let completion = completion { 
     completion() 
    } 
} 

}

  1. In Ihrem UITableView cellForRow stellen Sie sicher, CustomTableView werfen und die Fertigstellung Eigenschaft zuweisen. Innerhalb der cell.completion Schließung können Sie jede Aktion aufrufen, die Sie möchten.

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! CustomTableViewCell 
        cell.completion = { 
         print("Button tapped") 
        } 
        return cell 
    } 
    
+0

Dies funktioniert nicht für mich. Wenn ich meinen eigenen Code in cell.complettion hinzufügen {} ich einen Fehler „Fehlende Rückkehr in einem Verschluss zu erwarten zurückzukehren Void“ erhalten Der Code, den ich Eingabe bin, ist die 4 Zeilen startting mit „lassen koordinieren“ in meinem ursprünglichen Beitrag –

+0

sortierten es braucht return() bis zum Ende meines Codes –

+0

Ok gut hinzuzufügen, froh, dass Sie es sortieren. – muazhud

0

1) Erstellen eines benutzerdefinierten Klassen-:

class FruitTableViewCell: UITableViewCell { 
@IBOutlet weak var buttonClick: UIButton! 
} 

2) Verwenden cellForRowAt indexPath Methoden-:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "LabelCell", for: indexPath) as! FruitTableViewCell 


cell.buttonClick.tag = 1; 
cell.buttonClick.addTarget(self, action:#selector(self.pressed), forControlEvents: .TouchUpInside) 

    return cell 
} 

3) mit den erforderlichen Code Implementieren Sie Ihre Zielmethode - :

func pressed(sender: UIButton!) { 

if (sender.tag == 1) 
    { 
     var tr: newTracks! 
     if inSearchMode { 
      tr = filteredTrack[indexPath.row] 
     } else { 
      tr = items[indexPath.row] 
     } 
     let coordinate = CLLocationCoordinate2DMake(tr.lat,tr.lon) 
     let mapItem = MKMapItem(placemark: MKPlacemark(coordinate: coordinate, addressDictionary:nil)) 
     mapItem.name = tr.name 
     mapItem.openInMaps(launchOptions: [MKLaunchOptionsDirectionsModeKey :MKLaunchOptionsDirectionsModeDriving]) 
    } 

    } 
+0

Was ist das 'if (sender.tag == 0)' für? – nayem

+0

@nayem nur eine Referenz auf Ihre Schaltfläche. –

+0

Gut, dass Sie Ihre Antwort aktualisiert haben. Sonst habe ich mich gefragt, wie man 'if (sender.tag == 0)' beim Setzen von 'cell.buttonClick.tag = indexPath.row;'? – nayem