【问题标题】:popToRootViewController not removing promptpopToRootViewController 不删除提示
【发布时间】:2017-01-02 04:39:54
【问题描述】:

我有一个应用程序,它会在执行任务之前提示用户提供各种信息。用户输入所有信息后,我会先输入UIApplication.shared.openUrl(url: url),然后再输入self.navigationController?.popToRootViewController(animated: true)。应用程序弹回根视图控制器;但是,来自最后一个视图控制器的导航项提示现在包含在根视图控制器的导航项中。

任何人都明白为什么会发生这种情况以及解决它的好方法吗?当根视图控制器重新出现时,我可以将提示设置为"",但我想解决问题,而不是缓解症状。

更新

根据@Shad 的回答,我已经使用下面的代码更新了我的视图控制器,并且一切都按预期工作。

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)    
    self.navigationItem.prompt = nil
}

【问题讨论】:

  • 什么导航项提示?使用相关代码更新您的问题。
  • 我没有设置导航项提示的代码。导航项提示在故事板文件中都是静态的。
  • 我试图重现你得到的东西,但我没有任何问题。
  • 在view中会消失viewcontroller去掉提示。这应该可以解决问题

标签: ios swift uinavigationcontroller popviewcontroller


【解决方案1】:

原因是您的 prompts 已添加到窗口中并且可见,即使添加了 prompts 的父 View-Controller 当前不可见。如果您分享一些代码,我们可以继续详细说明。

但是,有一种方法可以在返回 RootViewController 之前关闭提示。 您可以使用-(void) viewWillDisappear:(BOOL)animated 关闭提示。只需通过在-(void) viewWillDisappear:(BOOL)animated 上调用removeFromSuperview() 从父视图控制器中删除prompts 视图。假设您的 prompts 是 UIView。

【讨论】:

  • 这解决了我的问题。但是,我认为它不适用于另一个视图控制器进入堆栈(例如模态)的情况。这将导致返回到最后一个视图控制器时提示为空。我仍然很好奇为什么会这样……
  • 除了您在 viewWillDisappear 中建议的内容外,我没有设置提示的代码。提示信息全部设置在故事板文件中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-17
  • 1970-01-01
  • 1970-01-01
  • 2017-10-16
  • 1970-01-01
  • 2011-02-24
  • 2015-01-05
相关资源
最近更新 更多