【问题标题】:How to correctly pop views in ios app?如何在 ios 应用程序中正确弹出视图?
【发布时间】:2015-01-19 22:17:52
【问题描述】:

我有这个流程: UITableView foo -> detail UIView bar 包含另一个 UITableView foo_1 -> detail UIView bar_1

第一个 UITableView foo 包含一个事物列表,并通向一个包含另一个 UITableView foo_1 的详细 UIView bar,该 UIView bar_1 通向另一个包含更多详细信息的 UIView bar_1。 现在,我在主应用程序标签栏上有几个按钮,我可以使用它来更改视图。当我点击一个指向另一个视图的按钮,然后点击应该返回我的 UITableView foo 的按钮时,我会看到 foo、bar 或 bar_1,这取决于我是哪个视图,我最后一次使用我描述的流程,但是每次点击标签栏上的相应按钮时,我都想返回 foo

我认为正确的方法是:

-(void) viewWillDisappear:(BOOL)animated{
    [self.navigationController popToRootViewControllerAnimated:NO];
}

但我不确定在哪里使用此代码...我尝试将其放入 bar_1 但它导致“嵌套弹出动画可能导致导航栏损坏意外状态。导航栏子视图树可能已损坏。"。结果是导航栏变得疯狂并显示为空...... 那么在类似情况下,返回的正确方法是什么?

【问题讨论】:

  • 使用视图控制器并适当地定位按钮的segue。听起来很像您正在使用单个视图控制器并向其添加越来越多的视图...
  • 哦不,我不是。对不起,很难解释。 foo 是一个仅包含 uitableview 的视图控制器。 bar 是一个视图控制器,包含一些东西和一个 uitableview (foo_1) 。 bar_1 是一个包含一些东西的视图控制器。我说的是三种不同的视图控制器。

标签: ios objective-c iphone uitableview uiview


【解决方案1】:

最直接的方法是为您的UITabBarController 设置一个委托并将您的代码放入tabBarController:didSelectViewController: 方法中,每次切换活动选项卡时都会调用该方法。当然,你应该检查它是否是正确的视图控制器,而不是每次选项卡切换时都弹出到根目录。

【讨论】:

  • 我的 AppDelegate.m 中有委托,并且我有你所说的方法。我不太确定“检查索引”是什么意思,以及如何用对我的 foo 控制器的适当引用替换 self ...我试图将“弹出”代码放在那里,并用“viewcontroller”替换“self” (作为参数传递给 didselectViewController 的变量)但它似乎不起作用。我认为每次您点击标签栏时都会弹出它(这并不完全正确,但我只是一个实验)但它似乎不起作用,永远
  • 好吧,对不起,我的错 - 出于某种原因,我认为所选视图控制器的索引将传递给委托方法,而不是视图控制器本身。我编辑了我的答案。
  • 我只能猜测为什么它对你不起作用,但我看到两个潜在的陷阱:1)确保你设置了委托; 2) 请注意,传递给tabBarController:didSelectViewController: 的视图控制器已经是UINavigationController,因此您需要执行[viewController popToRootViewControllerAnimated:NO]
  • 我非常确定要设置委托,结果......不是!最后,设置委托(tabBarController.delegate=self; 在我的 appdelegate.m 中的函数 didFinishLaunchingWithOptions 中)并使用简单的 popViewControllerAnimated 内部 bar 和 bar_1 视图(详细信息)弹出就足以获得我正在搜索的结果。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2017-06-17
  • 2014-08-29
  • 1970-01-01
  • 1970-01-01
  • 2012-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多