gpt4 book ai didi

iphone - UINavigationBar 似乎在 "back"上从堆栈中弹出 2 个项目

转载 作者:行者123 更新时间:2023-12-03 21:24:43 25 4
gpt4 key购买 nike

我正在手动管理我的 View 的 UINavigationBar。 Bar 本身和第一个 UINavigationItem 是在 Interface Builder 中创建的。在我的代码中,根据各种事件,我将新的导航项推送到栏上,并将适当的 View 绘制为主视图的 subview 。一切看起来都很好,但是当我选择导航栏后退按钮时,有两个项目从项目堆栈中删除,而不是我预期的 1 个。为了进行测试,我将 Controller 设置为 bar 和 trap 2 个委托(delegate)方法的委托(delegate):

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item; 

- (void)navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item;

我发现在弹出之前,导航栏中的项目是正确的,例如,3。在第二种方法中,在弹出之后,项目是1,即使弹出的项目是最后一个项目 - 不知何故中间的项目丢失了。我对如何调试这个问题感到困惑,并且希望得到任何想法。

请注意,由于各种原因我没有使用导航 Controller 。

最佳答案

检查弹出页面是用户启动的还是程序化的

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item
{
UIViewController *topViewController = self.topViewController;

... some logic that justifies implementing shouldPopItem: delegate in the first place -> others have explained the caveats so I won't repeat that ...

// manual as in opposite of programmatic
BOOL manualPop = topViewController.navigationItem == item;
if(manualPop) {
[self popViewControllerAnimated:YES];
}
return YES;
}

关于iphone - UINavigationBar 似乎在 "back"上从堆栈中弹出 2 个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1280580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com