2016-10-01 28 views
1

In Swift v3 wird mein TableView nicht erneut geladen. Ich bin mir ziemlich sicher, dass dieser Code in 2.0 funktioniert.TableView Reload von Segue funktioniert nicht in Swift 3

@IBAction func unwindToLevelListView(_ segue: UIStoryboardSegue) 
{ 
    print("RELOADING VIEW") 
    TableView.reloadData() 
} 

RELOADING VIEW wird gedruckt, aber das TableView wird nicht neu geladen. Ich habe auch versucht, diesen Code in ViewDidLoad und ViewDidAppear zu setzen, aber keiner von denen funktionierte.

P.S. Ein wichtiger Punkt ist, dass die Zeilen bei der Anzeige nicht erneut geladen werden (d. H. Nach unten und dann wieder nach oben).

Hilfe wird sehr geschätzt.

-Code folgt:

override func viewDidAppear(_ animated: Bool) 
{ 
    TableView.reloadData() 
} 

// Create Table 
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
{ 
    let cell = tableView.dequeueReusableCell(withIdentifier: "LevelSelected", for: indexPath) as! LevelListCell 

    // Set labels 
    cell.levelNameLabel.text = "LEVEL " + String(puzzleLevels[(indexPath as NSIndexPath).row]) 
    let unlocked: Bool = puzzleUnlocked[(indexPath as NSIndexPath).row] 

    if(challengeSelected == 1 && (indexPath as NSIndexPath).row == 0 && puzzleUnlocked[1] == false) 
    { 
     cell.levelStatusLabel.text = "Not Solved" 
    } 
    else if(unlocked == true) 
    { 
     cell.levelStatusLabel.text = "Solved" 
    } 
    else 
    { 
     cell.levelStatusLabel.text = "Not Solved" 
    } 

    // Set color 
    cell.levelNameLabel.textColor = UIColor.white 
    cell.levelStatusLabel.textColor = UIColor.white 

    if unlocked == false 
    { 
     cell.backgroundColor = UIColor.lightGray 
     // Uncomment to disable interaction 
     // cell.userInteractionEnabled = false // Comment Out to Remove Lock 
    } 
    else if unlocked == true 
    { 
     cell.backgroundColor = UIColor(red: 0, green: 64, blue: 128, alpha: 0.0) 
     cell.isUserInteractionEnabled = true 
    } 

    return cell 
} 

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

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
{ 
    levelSelected = (indexPath as NSIndexPath).row 

    self.performSegue(withIdentifier: "LevelSelected", sender: levelSelected); 
} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
{ 
    if (segue.identifier == "LevelSelected") 
    { 
     if let nextViewController = (segue.destination as? GameViewController) 
     { 
      nextViewController.selectedLevel = levelSelected 
      nextViewController.selectedChallenge = challengeSelected 
     } 
     print("List View Level Selected:\(levelSelected)") 
    } 
} 

@IBAction func unwindToLevelListView(_ segue: UIStoryboardSegue) 
{ 
    print("RELOADING VIEW") 
    TableView.reloadData() 
} 
+0

Haben Sie eine Steckdose für die Tabellenansicht festgelegt/verwenden Sie einen TableView-Controller? reloadData() lädt die Zeilen, die sichtbar sind, während der Sequenz neu, es ist noch keine Zeile sichtbar. deshalb heißt es nicht. versuche, self.tableView.reload() in "viewDidApprear" zu setzen - das muss funktionieren. Wenn es nicht funktioniert, gibt es ein weiteres Problem mit Ihrem Code. In diesem Fall geben Sie bitte den Code ein, um Ihre Tabelle zu füllen –

+0

Vielen Dank. Ich habe es in viewDidAppear hinzugefügt und es wird leider immer noch nicht angezeigt. Bereitstellen des Codes für das TableView. Alle anderen Funktionen außerhalb des Neuladens funktionieren. – Apocal

Antwort

0

Sie für die Antworten danken. Ich konnte herausfinden, was vor sich geht. Das Wichtigste bei der Ausführung des Abschnitts ist, dass die Werte wiederhergestellt werden.

@IBAction func unwindToLevelListView(_ segue: UIStoryboardSegue) 
{ 
    print("RELOADING VIEW") 
    let getLevels = Level(challengeNumber: challengeSelected, gameSelected: gameSelected) 
    puzzleLevels = getLevels.puzzleLevels 
    puzzleUnlocked = getLevels.unlocked 
    tableView.reloadData() 
} 
1
NotificationCenter.default.addObserver(self, selector:"reloadData", name: 
NSNotification.Name(rawValue: "reloadTableView"), object: nil) 

func reloadData(){ 
     DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { 
      print("Work SO !!") 
      self.tableView.reloadData() 
     } 
} 

NotificationCenter.default.post(name: NSNotification.Name(rawValue: "reloadTableView"), object: nil) 
+0

Ich werde das heute Abend versuchen. Vielen Dank. Sollte es nicht einen Verzögerungszeitgeber benötigen? – Apocal

+0

das ist, was ich in meinem tableView verwende .. vielleicht können Sie den Verzögerungstimer entfernen. Sie müssen in SichtDidLoad(), –

+0

Leider funktioniert dies nicht. Ich habe es überall hin geladen und auch die Verzögerungen genutzt. Glaubst du, dass es etwas mit den Reichslasten zu tun haben könnte? – Apocal

Verwandte Themen