2016-07-07 45 views
0

我有一些我調用的代碼更改了導航控制器中viewcontroller的viewWillAppear部分中的語言。 enter image description hereviewWillAppear在UINavigationController上返回時不會調用

當我點擊後退按鈕時,即使我在viewWillAppear中有它的代碼,語言變化也不會發生。唯一的一次切換是當我一直回到原始屏幕,然後開始向前移動時,它會改變。有什麼辦法可以在viewWillAppear工作中使用該功能嗎?

這裏是我的代碼,我使用的語言改變莢:

//MARK: Language change 

    //used to change language text for imediate screens 
    func setText(){ 
    locationsLabel.text = "Locations".localized() 
    languageLabel.text = "Languages".localized() 
    termsOfUseLabel.text = "Terms of Use".localized() 
    privacyPolicyLabel.text = "Privacy Policy".localized() 
    pushNotificationsLabel.text = "Push Notifications".localized() 
    contactUsLabel.text = "Contact Us".localized() 
    } 


    // Changes text to current language 
    override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "setText", name: LCLLanguageChangeNotification, object: nil) 
    } 

    // Remove the LCLLanguageChangeNotification on viewWillDisappear 
    override func viewWillDisappear(animated: Bool) { 
    super.viewWillDisappear(animated) 
    NSNotificationCenter.defaultCenter().removeObserver(self) 
    } 
+1

,你能否告訴我們'viewWillAppear中()'的代碼? –

+0

@LukeVanIn我用我的代碼更新了這個問題 – SwiftyJD

回答

1

viewWillAppear方法僅增加一個通知觀察者。觀察員在viewWillDisappear中被刪除。這意味着setText只有在LCLLanguageChangeNotification通知發送時纔會被調用而視圖可見

由於導航行爲導致視圖不在屏幕時立即停止更新。

要確保文本進行更新,你還需要調用setTextviewWillAppear

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 
    setText() 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "setText", name: LCLLanguageChangeNotification, object: nil) 
} 
+1

@盧克範在那做到了!非常感謝! – SwiftyJD

0

實施navigationcontroller委託方法

navigationController:willShowViewController:animated: 
navigationController:didShowViewController:animated: 
+0

我不熟悉這些方法,你會如何實現它們? – SwiftyJD

相關問題