2016-10-30 2 views
0

Also, was ich im Moment über Swift verstehe, ist, dass, um von einer Ansicht zur anderen überzugehen, der Weg, um darüber zu gehen, Übergänge verwendet. In meiner App habe ich jedoch eine Tabellenansicht, in der eine Liste der Elemente angezeigt wird, mit denen der Benutzer interagieren kann. Dadurch werden die Elemente auf einen anderen Ansichtscontroller in meiner App verschoben, der sich in einer Tab-Leiste befindet.Daten von einem Tabellenansicht-Controller an einen anderen in der Registerkartenansicht enthaltenen Ansichtscontroller übergeben?

class JobCompletedTableViewController: UITableViewController { 

    // MARK: Properties 
    var jobsCompleted = [Job]() 
    var jobsChosen = [Job]() 

override func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? { 
let share = UITableViewRowAction(style: .normal, title: "Share") { action, index in 
      // Add data to the array created locally 
      self.jobsChosen.append(self.jobsCompleted[indexPath.row]) 
     } 

     share.backgroundColor = UIColor.blue 

     return [share] 
    } 
    // Need some sort of method to pass data into other view 
    //controller if tab button is clicked 
} 

Die Tabellenansicht, die in einem Navigationscontroller und Tab-Bar-View-Controller eingebettet ist.

Mein erster Gedanke zu diesem Problem war, einfach ein Array im View-Controller zu erstellen, das die Benutzerinteraktion mit Listenelementen verfolgt. Fügen Sie dann Elemente hinzu, mit denen der Benutzer interagiert hat. Wenn der Benutzer auf ein Element in der Tableiste klickt, instanziieren Sie den anderen Tabellenansicht-Controller, der alle Elemente anzeigt, mit denen der Benutzer interagiert hat.

Ich würde es schätzen, wenn Sie gehen würden, wie ich tatsächlich eine Instanz der ChosenTableViewController-Klasse instanziieren kann, die alle Liste der Elemente enthalten wird, mit denen Benutzer interagierten.

Storyboard, eine Vorstellung davon zu geben, was meine app aussieht und wie die darin enthaltenen enter image description here

+0

Seine unklar, die basierend auf dem Diagramm-Controller Ihr Bezug anzuzeigen. Versuchen Sie, von der Überweisung zu Jobs vc zu gehen? Hinzufügen eines vorbereiteten Verweises zur Liste der Jobs? Bleiben diese Dinge lokal oder ziehen sie aus einem Netzwerk? – JustinM

+0

Ah ich entschuldige mich, ich versuche, von Jobs VC zu E-Mail VC zu gehen, indem Sie auf die Registerkarte unten tippen. Die Daten werden lokal beibehalten, ich werde sie bearbeiten, um zu verdeutlichen –

+0

Der beste Weg, um darüber zu gehen, ist Core-Daten, Realm oder was auch immer Persistance-Methode verwenden Sie verwenden, und fügen Sie eine Bool-Eigenschaft zum Job-Typ mit dem Standardwert von falsch (z. B. var selected = false). Wenn ein Benutzer eine Zeile auswählt, ändern Sie den Wert der ausgewählten Eigenschaft und behalten die neue Auswahl bei. Wenn Sie dann zu E-Mail-Vc gehen, rufen Sie alle Jobs ab, für die der ausgewählte Wert == True lautet. Dadurch werden die übergebenen Daten von VC zu VC entfernt. Ich würde eine Antwort schreiben, aber ich kann kein vollständiges Beispiel im Code geben. Abbildung Dies kann Sie in der Zwischenzeit auf eine Implementierung – JustinM

Antwort

1

Da sie nicht beibehalten werden müssen, wäre die einfachste Lösung, die einen Singleton zu verwenden sein, dass die gewählten halten Jobs in einem Array, die Sie aus der E-Mail-VC abrufen können, wenn sie angezeigt wird.

final class SelectedJobs { 

static let shared = SelectedJobs() 

var jobsArray = [Job]() 
} 

Dann in der E-Mail-VC:

class EmailVC: UIViewController { 
    var selectedJobs = [Job]() 

    override func viewWillApear(_ animated: Bool) { 
    super.viewWillAppear(animated) 

     for job in SelectedJobs.shared.jobsArray { 
     selectedJobs.append(job) 
     } 

     self.tableView.reloadData() 
    } 

} 
Verwandte Themen