2016-10-01 2 views
1

В Swift v3 мой TableView не перезагружается после segue. Я уверен, что этот код работал в версии 2.0.TableView перезагрузите Segue, не работая в Swift 3

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

RELOADING VIEW печатает, но TableView не перезагружается. Я также попытался поместить этот код в ViewDidLoad и ViewDidAppear, но ни один из них не работал.

P.S. Обратите внимание: строки также не перезагружаются при отображении (т. Е. Прокручиваются вниз, а затем сохраняются).

Помощь с благодарностью.

Код Следит:

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

Вы установили розетку для настольного экрана/использовали контрольный стол? reloadData() перезагружает те строки, которые видны, во время segue, пока нет видимой строки. поэтому его не называют. попробуйте установить self.tableView.reload() в "viewDidApprear" - это должно работать. если он не работает, есть еще одна проблема с вашим кодом. в этом случае, пожалуйста, предоставьте код для заполнения таблицыView. –

+0

Спасибо. Я добавил его в viewDidAppear и, к сожалению, он пока не отображается. Предоставление кода для tableView. Все остальные функции за пределами перезагрузки работают. – Apocal

ответ

0

Спасибо за ответы. Мне удалось выяснить, что происходит. Самое важное, что делает segue, - это обеспечить восстановление ценностей.

@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

Я попробую сегодня. Спасибо. Должен ли он не нуждаться в таймере задержки? – Apocal

+0

Это то, что я использую в моем столе. Возможно, вы можете удалить таймер задержки. Вам нужно получить viewDidLoad(), –

+0

К сожалению, это не работает. Я загрузил его везде, о котором я могу думать, а также использовал задержки. Считаете ли вы, что это может иметь какое-либо отношение к нагрузкам на царство? – Apocal