在UINavigation上重置viewcontroller返回

时间:2016-03-15 04:17:36

标签: ios swift uiviewcontroller

TL; DR:

如何从自动放置的UINavigationController后退按钮完全重新创建/重置我正在导航回来的视图控制器?

  • OldVC< - CurrentVC

  • 确保OldVC完全重置。

大家好,

我正在使用UINavigation和自动生成的后退按钮。当用户按下后退按钮时,我希望导航堆栈中的前一个视图控制器完全重新实现 - 类似于创建视图控制器然后按下它的方式。

我尝试过以下但未能找到解决方案:

  • 视图将加载目标VC,self.view.setNeedsDisplay() - 不重新创建

  • 从堆栈中手动删除旧VC并在其中插入一个新VC

  • 解雇VC - 当主VC离开新VC时,调用self.dismissViewControllerAnimated(true, completion: nil) 不会从堆栈中删除旧VC

我现在有一个临时解决方案,现在使用以下代码,但是从UX的角度来看,它是不对的,因为它依赖于自定义按钮和来自推送的不合逻辑的动画,使用户认为他们正在进一步进入应用程序而不是出来,代码在下面并完全重新创建VC(从实例化中可以看出)。

private func goToStoryBoard(name: String) {
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let vc = storyboard.instantiateViewControllerWithIdentifier(name)
    self.navigationController?.pushViewController(vc, animated: true)

}

更新

看起来问题在于我创建自定义组件的方式 - 我将它们初始化一次,如下所示,但通过这样做,它们将不会更新:

  class HomeMenuButton: UIButton { 
           required init?(coder aDecoder: NSCoder) { 
              super.init(coder: aDecoder)                                
              self.setTitleColor(InterfaceColors.MainFont, forState: .Normal) 
              self.titleLabel?.font = InterfaceFonts.ButtonFont 
      } 
}

1 个答案:

答案 0 :(得分:1)

不要创建一个全新的视图控制器。只需实现viewWillAppear:即可完全初始化视图。这将在视图控制器的视图最初出现时以及出现时同样有效,因为弹出的视图控制器正在弹出以显示它。

(如果以后出现任何情况,想要重新初始化viewWillAppear:上的视图,请在这些情况下提出Bool标志。)