返回 UINavigationController 时未调用 viewWillAppear
viewWillAppear not called when going back on a UINavigationController
我调用了一些代码来更改导航控制器内 viewcontroller 的 viewWillAppear 部分中的语言。
当我点击后退按钮时,语言更改没有发生,即使我在 viewWillAppear 中有它的代码。它唯一一次切换是当我一路返回到原始屏幕然后开始向前移动时它发生了变化。有什么方法可以让 viewWillAppear 中的函数正常工作吗?
这是我的代码,我正在使用语言更改 pod:
//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)
}
实现导航控制器委托方法
navigationController:willShowViewController:animated:
navigationController:didShowViewController:animated:
viewWillAppear
方法只是添加一个通知观察者。观察者在 viewWillDisappear
中被移除。这意味着 setText
仅当 LCLLanguageChangeNotification
通知被发送 而视图可见 时才会被调用。
由于导航行为,一旦视图离开屏幕,更新就会停止。
为了保证文字更新,还需要在viewWillAppear
里面调用setText
:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
setText()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "setText", name: LCLLanguageChangeNotification, object: nil)
}
我创建了这个小 class 来解决这个问题。
只需将它设置为您的导航控制器的委托,并在您的视图控制器中实现简单的一两个方法 - 当视图即将显示或已经通过 NavigationController
显示时将被调用
我调用了一些代码来更改导航控制器内 viewcontroller 的 viewWillAppear 部分中的语言。
当我点击后退按钮时,语言更改没有发生,即使我在 viewWillAppear 中有它的代码。它唯一一次切换是当我一路返回到原始屏幕然后开始向前移动时它发生了变化。有什么方法可以让 viewWillAppear 中的函数正常工作吗?
这是我的代码,我正在使用语言更改 pod:
//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)
}
实现导航控制器委托方法
navigationController:willShowViewController:animated:
navigationController:didShowViewController:animated:
viewWillAppear
方法只是添加一个通知观察者。观察者在 viewWillDisappear
中被移除。这意味着 setText
仅当 LCLLanguageChangeNotification
通知被发送 而视图可见 时才会被调用。
由于导航行为,一旦视图离开屏幕,更新就会停止。
为了保证文字更新,还需要在viewWillAppear
里面调用setText
:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
setText()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "setText", name: LCLLanguageChangeNotification, object: nil)
}
我创建了这个小 class 来解决这个问题。 只需将它设置为您的导航控制器的委托,并在您的视图控制器中实现简单的一两个方法 - 当视图即将显示或已经通过 NavigationController
显示时将被调用