Tab view controller, обновление label при возврате


#1

Здравствуйте,

Нужен совет. Есть tab view controller и два vc. На первом есть элементы интерфейса, в том числе label (Int). Второй vc - разные настройки. Меняю на втором значение, оно записывается в глобальную переменную (объявлена в первом vc). Перехожу на первый vc - label не изменилась. Нажимаю на любую кнопку - label обновляется и данные в глобальной переменной правильные. Как мне обновлять label или другие элементы интерфейса при возврате на первый vc? viewDidLoad не работает

На stack советуют viewWillAppear, но у меня это не работает (хотя может не правильно делаю).

Что я делаю не так?

Заранее благодарен.


#2

На это сообщение поступили жалобы от участников сообщества, поэтому оно временно скрыто.


#3

viewDidAppear тоже не помог. Вот мой кусок кода:

override func viewDidLoad() {
super.viewDidLoad()

    clockMainScreen.text = String (clockStep)
    
    if UserDefaults.standard.value(forKey: "counterStepperValue") != nil {
        clockMainScreen?.text = String (clockStep)
    } else {
        clockMainScreen?.text = String ("1")
    }
    
    navigationController?.isNavigationBarHidden = true
    self.navigationController?.popViewController(animated: true)

}

func viewWillAppear() {
   clockMainScreen.text = String (clockStep)
}

func viewDidAppear() {
   clockMainScreen.text = String (clockStep)
}

#4

На это сообщение поступили жалобы от участников сообщества, поэтому оно временно скрыто.


#5

Простите, но не понимаю что вы имеете ввиду.


#6

На это сообщение поступили жалобы от участников сообщества, поэтому оно временно скрыто.


#7

Вот код основного vc. Могу выложить проект, там нет ничего секретного, просто отрабатываю некоторые технологии.

import UIKit
import AudioToolbox
import AVFoundation

var clockStep = 1
var useVibration: Bool = true
var useSoundPlay: Bool = true

@IBDesignable

class ViewController: UIViewController {
    
    var counter = 0
    var audioPlayer: AVAudioPlayer?
    let mySound = URL(fileURLWithPath: Bundle.main.path(forResource: "digi_plink", ofType: "wav")!)


    @IBOutlet weak var label: UILabel!
    @IBOutlet weak var clockMainScreen: UILabel!
    
    @IBAction func resetButton(_ sender: Any) {
        let mySound = URL(fileURLWithPath: Bundle.main.path(forResource: "pop_drip", ofType: "wav")!)
        do{
            audioPlayer = try AVAudioPlayer(contentsOf: mySound)
            audioPlayer!.prepareToPlay()
            audioPlayer!.play()
        } catch {}
        
        AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))
        counter = 0
        label.text = String (counter)
        clockMainScreen.text = String (clockStep)
    }
    
    @IBAction func minusButton(_ sender: Any) {
        if counter - clockStep > 0 {
            counter = counter - clockStep
            label.text = String (counter)
        } else {
            counter = 0
            label.text = String (counter)
        }
        
        clockMainScreen.text = String (clockStep)
        
        if useVibration {
            AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))
        }
        
        if useSoundPlay {
            do{
                    audioPlayer = try AVAudioPlayer(contentsOf: mySound)
                    audioPlayer!.prepareToPlay()
                    audioPlayer!.play()
                    } catch {}
        }
    }
    
    @IBAction func plusButton(_ sender: Any) {
        if counter + clockStep >= 999 {
            counter = 999
        } else {
            counter = counter + clockStep
            label.text = String (counter)
        }
        
        clockMainScreen.text = String (clockStep)
        
        if useVibration {
            AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))
        }
        
        if useSoundPlay {
            do{
                audioPlayer = try AVAudioPlayer(contentsOf: mySound)
                audioPlayer!.prepareToPlay()
                audioPlayer!.play()
            } catch {}
        }
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        clockMainScreen.text = String (clockStep)
        
        if UserDefaults.standard.value(forKey: "counterStepperValue") != nil {
            clockMainScreen?.text = String (clockStep)
        } else {
            clockMainScreen?.text = String ("1")
        }
        
        navigationController?.isNavigationBarHidden = true
        self.navigationController?.popViewController(animated: true)

    }

    func viewWillAppear() {
       clockMainScreen.text = String (clockStep)
    }
    
    func viewDidAppear() {
       clockMainScreen.text = String (clockStep)
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

#8

На это сообщение поступили жалобы от участников сообщества, поэтому оно временно скрыто.


#9

Большое спасибо. Буду разбираться.


#10

paketik,

Ещё раз спасибо за наводку. Из коробки оно конечно не заработало, но погуглив я нашёл решение.

import UIKit
import AudioToolbox
import AVFoundation

var clockStep = 1
var useVibration: Bool = true
var useSoundPlay: Bool = true

@IBDesignable

class ViewController: UIViewController {
    
    var counter = 0
    var audioPlayer: AVAudioPlayer?
    let mySound = URL(fileURLWithPath: Bundle.main.path(forResource: "digi_plink", ofType: "wav")!)


    @IBOutlet weak var label: UILabel!
    @IBOutlet weak var clockMainScreen: UILabel!
    
    @IBAction func resetButton(_ sender: Any) {
        let mySound = URL(fileURLWithPath: Bundle.main.path(forResource: "pop_drip", ofType: "wav")!)
        do{
            audioPlayer = try AVAudioPlayer(contentsOf: mySound)
            audioPlayer!.prepareToPlay()
            audioPlayer!.play()
        } catch {}
        
        AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))
        counter = 0
        label.text = String (counter)
        clockMainScreen.text = String (clockStep)
    }
    
    @IBAction func minusButton(_ sender: Any) {
        if counter - clockStep > 0 {
            counter = counter - clockStep
            label.text = String (counter)
        } else {
            counter = 0
            label.text = String (counter)
        }
        
        clockMainScreen.text = String (clockStep)
        
        if useVibration {
            AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))
        }
        
        if useSoundPlay {
            do{
                    audioPlayer = try AVAudioPlayer(contentsOf: mySound)
                    audioPlayer!.prepareToPlay()
                    audioPlayer!.play()
                    } catch {}
        }
    }
    
    @IBAction func plusButton(_ sender: Any) {
        if counter + clockStep >= 999 {
            counter = 999
        } else {
            counter = counter + clockStep
            label.text = String (counter)
        }
        
        clockMainScreen.text = String (clockStep)
        
        if useVibration {
            AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))
        }
        
        if useSoundPlay {
            do{
                audioPlayer = try AVAudioPlayer(contentsOf: mySound)
                audioPlayer!.prepareToPlay()
                audioPlayer!.play()
            } catch {}
        }
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        clockMainScreen.text = String (clockStep)
        
        if UserDefaults.standard.value(forKey: "counterStepperValue") != nil {
            let tempValue = UserDefaults.standard.value(forKey: "counterStepperValue") as! Int
            clockMainScreen?.text = String (tempValue)
            clockStep = tempValue
        } else {
            clockMainScreen?.text = "1"
        }
        
        navigationController?.isNavigationBarHidden = true
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        if UserDefaults.standard.value(forKey: "counterStepperValue") != nil {
            let tempValue = UserDefaults.standard.value(forKey: "counterStepperValue") as! Int
            clockMainScreen?.text = String (tempValue)
        } else {
            clockMainScreen?.text = "1"
        }
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}