Данные перезагрузки табличного представления возвращают числа к значению по умолчанию - PullRequest
1 голос
/ 11 февраля 2020

Я пытаюсь представить данные (в ячейке), которые пользователь ввел с помощью всплывающего окна. Я могу получить данные из всплывающего окна, однако они возвращаются к исходному значению, когда я поднимаю другое всплывающее окно.

ViewController

var highScore = "~"
var level = "1"

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let scorePopupViewController = segue.destination as? ScorePopupViewController{
            scorePopupViewController.onSaveScore = updateHighScore
        }else if let levelPopupViewController = segue.destination as? LevelViewController{
            levelPopupViewController.onSaveLevelMyKey = updateLevel
            levelPopupViewController.mode = sender as! Int
        }
    }


func updateHighScore(_ data:String?)->(){
        if data != nil{
            highScore = data!
        }
        tableView.reloadData()
    }

func updateLevel(_ data:[String]?)->(){
        if data != nil{
             level = String(data![1])
        }
        tableView.reloadData()
    }

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//third section
if indexPath.section == 3{
            let statisticCell:StatisticTableViewCell! = tableView.dequeueReusableCell(withIdentifier: "STATS_CELL") as? StatisticTableViewCell
            statisticCell.delegate = self
            statisticCell.scoreSelectBtn.titleLabel?.text = self. highScore
            statisticCell.levelSelectBtn.titleLabel?.text = self.level    
            return statisticCell
}

//Delegate for cell
func scoreSelectBtnWasPressed() {
     performSegue(withIdentifier: "TO_SCOREPOPVC", sender: nil)
 }

func levelSelectBtnWasPressed() {
     performSegue(withIdentifier: "TO_LEVELPOPVC", sender: 0)
 }

ScorePopupV C

var onSaveScore:((_ data: String?)->())?

@IBAction func addScoreBtnWasPressed() {
        if scoreTextField.text! != ""{
            onSaveScore?(scoreTextField.text!)
        }else{
            onSaveScore?(nil)
        }
        dismiss(animated: true)
    }

@objc func dismissView (_ sender: UITapGestureRecognizer) {

        if scoreTextField.text! == ""{
            onSaveScore?(nil)
        }
        dismiss(animated: true)
    }

Странная часть заключается в том, что при печати рекордов и уровень в cellForRowAt я получаю правильную оценку. Это немного сложно, поэтому я создал диаграмму происходящего. Любая помощь приветствуется

enter image description here

1 Ответ

3 голосов
/ 11 февраля 2020

Вы должны обновить заголовок UIButton с помощью функции setTitle (title: String ?, для: UIControl.State) вместо прямого доступа к titleLabel. Таким образом, представление информируется о том, что контент uibutton нуждается в обновлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...