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
}
}
答案 0 :(得分:1)
不要创建一个全新的视图控制器。只需实现viewWillAppear:
即可完全初始化视图。这将在视图控制器的视图最初出现时以及出现时同样有效,因为弹出的视图控制器正在弹出以显示它。
(如果以后出现任何情况,不想要重新初始化viewWillAppear:
上的视图,请在这些情况下提出Bool标志。)