2016-08-27 9 views
1

Versuchen, das Label für ausgewählte Zelle auf TableViewController Zwei zurück zu einem Label auf einer statischen Zelle auf TableViewController eins, wenn ich die Zurück-Taste drücken. Ich bekomme das richtige Etikett bei didSelectRowAtIndexPath(). aber die Daten werden nicht zurückgegeben, wenn ich versuche, es zu drucken. Ich habe zahlreiche Szenarien ausprobiert und kam als letzter Ausweg hierher. jede Hilfe wäre dankbar, danke!Daten werden nicht an vorherigen Tableview-Controller zurückgegeben

Tableviewcontroller ein:

class SearchTableViewController: UITableViewController, SortProtocol { 

var sort: String? 

override func viewDidLoad() { 
    super.viewDidLoad(

    SORTBYCELL.detailTextLabel?.text = sort 


} 
    func passdata(sort: String?){ 
    self.sort = (sort) 
    } 

Tableviewcontroller Zwei:

protocol SortProtocol { 
func passdata(sort: String?) 
} 
class SortByTable: UITableViewController { 

var delegate: SortProtocol? 

override func viewDidLoad() { 
    super.viewDidLoad() 

    tableView.delegate = self 
} 

override func tableView(tableView: UITableView,   didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    let current = tableView.cellForRowAtIndexPath(indexPath)! as UITableViewCell 

    let sort = current.textLabel!.text! 

    self.delegate?.passdata(sort) 
+0

In vc2, müssen Sie einen Verweis auf VC1 erhalten und es an den Delegaten zuweisen. Verwenden Sie einen Navigationscontroller? – Shades

+0

setzen Sie diese 'SORTBYCELL.detailTextLabel? .text = sort' 'in func passdata (sort: String?) {...}. Weil viewDidLoad nur einmal ausgeführt wird, wenn die Ansicht geladen wird – KSR

Antwort

0

Sie müssen den Delegierten zuweisen. Wenn Sie einen "Zurück" -Knopf haben, gehe ich davon aus, dass Sie einen Navigationscontroller verwenden. Damit erhalten wir einen Verweis auf den ersten viewController. So Ihre viewDidLoad() in SortByTable wird wie folgt aussehen:

override func viewDidLoad() { 
    super.viewDidLoad() 

    let searchVC = self.navigationController?.viewControllers[0] as! SearchTableViewController 
    self.delegate = searchVC 

    tableView.delegate = self 
} 
+0

keine Ahnung, wie ich das Häkchen halten wenn der Benutzer zurück in die "SortByTable" geht? schätze meine Hilfe, die mein Problem behob –

+0

@JoeDodge Das Häkchen für die vorher ausgewählte Zeile? Sie würden eine Variable brauchen, die verfolgt, welche Zelle ausgewählt wurde, dann wenn diese v iiewController ist wieder auf dem Bildschirm, Sie überprüfen die Variable und setzen diese Zeile auf ausgewählte – Shades

+0

Ja, das ist es, tolle Idi es auschecken ... begann vor etwa einem Monat mit dem Schreiben von iOS-Anwendungen von Web-Entwicklung. Ich schätze deine Hilfe –

0

Ihr Code nicht erwähnt, wenn Sie überprüft, dass delegate nicht nil ist (durch einen Haltepunkt auf es beispielsweise Einstellung).

Die beste Option, wenn UITableViewCell s Aktualisierung ist so über die Datenquelle Methode zu tun:

func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

in Ihrem Fall also, macht passdata Update Sie Datenquelle mit dem neuen Wert von sort, rufen Sie dann tableView.reloadData() um die Zelle neu zu laden.

+0

Das Zellenetikett, das ich aktualisiere, ist statisch ich gerade habe outlets zu jeder Zellenbezeichnung in der Datei, während die Zellen, die ich wähle, aus einem Array stammen.Ich hatte es mit Vorbereitung für den Übergang arbeiten, aber ich bevorzuge es auf diese Weise.Wenn ich auf eine Zelle klicke, druckt es die richtige Bezeichnung werde es einfach nicht passieren –

+0

Ich denke, mit der Datenquelle ist der Weg zu gehen, ich bin mir nicht sicher, ob die Einstellung IBoutlet 's von einer Klasse zu einem Prototyp Zelle sollte funktionieren – paulvs

Verwandte Themen