【问题标题】:viewWillAppear not called when going back on a UINavigationController返回 UINavigationController 时未调用 viewWillAppear
【发布时间】:2016-07-07 20:46:39
【问题描述】:

我调用了一些代码来更改导航控制器内视图控制器的 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)
  }

【问题讨论】:

  • 你能告诉我们viewWillAppear()的代码吗?
  • @LukeVanIn 我用我的代码更新了问题

标签: ios swift viewwillappear


【解决方案1】:

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)
}

【讨论】:

  • @Luke Van In 做到了!非常感谢!
【解决方案2】:

实现 navigationcontroller 委托方法

navigationController:willShowViewController:animated:
navigationController:didShowViewController:animated:

【讨论】:

  • 我不熟悉这些方法,你会如何实现它们?
【解决方案3】:

我创建了这个小类来解决这个问题。 只需将其设置为导航控制器的委托,并在视图控制器中实现简单的一两个方法 - 当视图即将显示或已通过 NavigationController 显示时将被调用

Here's the GIST showing the code

【讨论】:

    猜你喜欢
    • 2011-03-05
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多