2017-06-27 4 views
2

Ich möchte Daten von InvatationsViewController zu QAVC (ViewController) mit einem Wörterbuch namens Elemente übergeben. Wie kann ich Daten aus einem Wörterbuch an QAVC ViewController übergeben?UITableView Segue, Daten aus dem Verzeichnis übergeben

InvatationsViewController:

import UIKit 

class InvatationsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

@IBOutlet weak var tableView: UITableView! 
@IBOutlet weak var welcomeLbl: UILabel! 

let segueID = "AnsweringSession" 
var sendSelectedData = NSString() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.tableView.delegate = self 
    self.tableView.dataSource = self 
} 

// This function is called before the segue 
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    // get a reference to the second view controller 
    let secondViewController = segue.destination as! QAVC 

    // set a variable in the second view controller with the data to pass 

    //Pass data to QAVC: 
    let item = items[indexPath.row] 

    secondViewController.question1 = item["question1"]! 
    secondViewController.question2 = item["question2"]! 
    secondViewController.question3 = item["question3"]! 
    secondViewController.question4 = item["question4"]! 
    secondViewController.question5 = item["question5"]! 
    secondViewController.answer1 = item["answer1"]! 
    secondViewController.answer2 = item["answer2"]! 
    secondViewController.answer3 = item["answer3"]! 
    secondViewController.answer4 = item["answer4"]! 
    secondViewController.answer5 = item["answer5"]! 

} 

func numberOfSections(in tableView: UITableView) -> Int { 
    return 1 
} 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return items.count 
} 

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

    let item = items[indexPath.row] 

    cell.nameLbl?.text = item["name"]! 
    cell.modeLbl?.text = item["mode"]! 
    return cell 
} 

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    let item = items[indexPath.row] 
    self.performSegue(withIdentifier: segueID, sender: item) 
} 


@IBAction func createMap(_ sender: UIButton) { 

} 

} 

QAVC:

import UIKit 

class QAVC: UIViewController { 

var question1 = "" 
var question2 = "" 
var question3 = "" 
var question4 = "" 
var question5 = "" 
var answer1 = "" 
var answer2 = "" 
var answer3 = "" 
var answer4 = "" 
var answer5 = "" 

@IBOutlet weak var questionLbl: UILabel! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 
    questionLbl.text = question1 
} 


} 

Artikel Dictonary:

var items = [ 
["name": "Animals", "mode": "5 Mode", 
"question1": "Random QuestionA", "answer1": "false", 
"question2": "Random QuestionB", "answer2": "true", 
"question3": "Random QuestionC", "answer3": "true", 
"question4": "Random QuestionD", "answer4": "true", 
"question5": "Random QuestionE", "answer5": "false"], 
["name": "Capitals", "mode": "5 Mode", 
"question1": "Random QuestionF", "answer1": "false", 
"question2": "Random QuestionG", "answer2": "true", 
"question3": "Random QuestionH", "answer3": "true", 
"question4": "Random QuestionI", "answer4": "true", 
"question5": "Random QuestionK", "answer5": "false"]] 
+0

ausgewählt passieren Da Sie Ihre Frage aktualisieren, haben Sie zwei Wörterbücher in Ihrem ' Artikel-Array. Welche sind Sie bereit, an den nächsten View-Controller zu übergeben? –

+0

Nicht verwandt, aber haben Sie jemals ein geeigneteres Datenformat als ein Wörterbuch in Betracht gezogen? Und wenn nicht das gesamte Wörterbuch statt 10 extrahierte Werte? – vadian

+0

@FangmingNing Ich versuche, den einen zu übergeben, den der Benutzer aus tableview auswählt – articga

Antwort

1

Definieren Sie Ihre Artikel außerhalb von didSelectRow Methode

var item: Dictionary<String, String>! 

Dann in Ihrem didSelectRow, Sollwert auf die item Variable

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     item = items[indexPath.row] 
     self.performSegue(withIdentifier: segueID, sender: item) 
    } 

Und schließlich kann man die eine

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    secondViewController.question1 = item["question1"]! 
    secondViewController.question2 = item["question2"]! 
    secondViewController.question3 = item["question3"]! 
    secondViewController.question4 = item["question4"]! 
    secondViewController.question5 = item["question5"]! 
    secondViewController.answer1 = item["answer1"]! 
    secondViewController.answer2 = item["answer2"]! 
    secondViewController.answer3 = item["answer3"]! 
    secondViewController.answer4 = item["answer4"]! 
    secondViewController.answer5 = item["answer5"]! 

} 
+0

Danke für Ihre Antwort, aber ich muss diese haben Item = items [indexPath.row] 'Fragen zu haben, wenn entsprechende Tabelle View Zelle gedrückt wird. Ich bekomme diesen Fehler unaufgeklärten Bezeichner 'indexPath'. 'let item = items [indexPath.row]' funktioniert in 'cellForRowAt' metheod – articga

+0

@articga Aktualisiert. Wenn Sie fortfahren, können Sie das Wörterbuch übergeben oder struct, object erstellen, um Ihr Wörterbuch zu ersetzen, damit Ihre Syntax sauberer wird –

+0

Es funktioniert. Ich danke dir sehr! @FangmingNing – articga

Verwandte Themen