【发布时间】:2014-03-25 15:00:47
【问题描述】:
我在尝试从 ios 应用程序操作导航堆栈时遇到问题。或者至少是这种操纵导致的行为。
我的情况:
我有 3 个 ViewController。
控制器 a 显示多个级别, 控制器 b 是游戏视图 控制器 c 是某种分数
显然,我将在控制器 a 中选择一个关卡,这会触发对控制器 b 的转移,一旦关卡完成后将转移到控制器 c。每次转场都是一种推动。
现在,一旦我在控制器 c 中,我不希望能够使用后退按钮返回到 b。我想回到控制器a。为了让它工作,我从堆栈中删除了控制器,所以后面不会移动到控制器 b。这很好用。
我面临的问题是后退按钮确实显示在控制器 a 上,这似乎关闭了,因为不应该有任何后退。如果我点击后退按钮,应用程序不会崩溃,按钮会消失,留下标题。
我尝试添加:
NSArray* controllers = [self.navigationController viewControllers];
if ([controllers count]<=1) {
[self.navigationItem setHidesBackButton:YES animated:YES];
} else {
[self.navigationItem setHidesBackButton:NO animated:YES];
}
[super viewDidAppear:animated];
正如一些相关的 stackoverflow 文章中所建议的那样,但没有成功。除了这不起作用之外,似乎 ios 在没有我实际添加它们的情况下从 Storyboard 创建这些按钮,但在不再需要它们时不会删除它们。这给我留下了一些选择。
- 我认为 ios 比实际更智能
- 我缺少更新导航栏所必需的东西
- 我错了
besdies 我正在使用这段代码从控制器 b 到 c 进行剪切。
[self performSegueWithIdentifier:@"feedbackSegue" sender:self];
[self removeFromParentViewController];
非常感谢任何有关缺失操作或一般不良做法的提示。
更新
经过进一步调查,它不仅仅是后退按钮,整个导航栏都关闭了。它的行为就像被移除的控制器仍然在那里一样。 BackButton 在那里,右端有另一个 uiActionButton。
导航栏是否将其状态存储到与视图控制器不同的堆栈中?如果是这种情况,我也可以从该堆栈中删除该状态,以保持一致。
【问题讨论】:
标签: ios objective-c uinavigationcontroller