1

导航控制器上的后退按钮有时不会出现。请注意,有时确实如此,因此其他地方的 som 代码中可能还发生了其他事情,但是我尝试以我能想到的各种方式对其进行调试,但似乎没有任何效果。

推送视图控制器的代码如下(相当标准):

CommentsTableViewController *vc = [[[CommentsTableViewController alloc] init] autorelease];
vc.puzzleID = self.puzzleModel.puzzleID;
[self.navigationController pushViewController:vc animated:YES];

为了调试这个问题,我在 viewWillAppear 和 viewDidAppear 的 CommentsTableViewController 中放了以下代码(除了我只注册为观察者一次):

self.navigationItem.hidesBackButton = NO;

[self.navigationItem addObserver:self forKeyPath:@"backBarButtonItem" options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionInitial) context:nil];

self.navigationItem.backBarButtonItem.title = @"Tactic";
NSArray *viewControllerArray = [self.navigationController viewControllers];
int parentViewControllerIndex = [viewControllerArray count] - 2;
[[viewControllerArray objectAtIndex:parentViewControllerIndex] setTitle:@"Tactic"];

这些似乎都没有帮助。设置断点后,层次结构中我上方的视图控制器似乎有一个标题(@“Tactic”),并且 hidesBackButton 已经是 NO。backBarButtonItem 属性为 nil 并且始终为 nil,尽管我认为这是预期的行为,即使您确实有 backBarButtonItem?

编辑:在父控制器中,我首先将 hidesBackBackButton 设置为 YES,然后(在我按下下一个控制器之前),将其设置回 NO。当我删除这些行时,新的视图控制器有一个后退按钮。为什么一个视图控制器的导航项会影响下一个视图控制器的导航项?

欢迎任何建议或想法。非常感谢。

4

2 回答 2

1

也许您可以更好地解决问题,调试它。您假设引导您返回的按钮是这样的:

self.navigationItem.backBarButtonItem.title = @"Tactic";

但这为零,如果您想在导航控制器的导航栏中找到该按钮:

NSLog(@"%@",self.navigationController.navigationBar.topItem);

我看不出您的代码无法正常工作的原因,您也不需要这样做:

self.navigationItem.hidesBackButton = NO;  

试试这个:

self.navigationController.navigationBar.topItem.hidesBackButton = NO;

无论如何,即使我没有将其设置为 NO,这对我也有效。

如果这不能解决问题,它至少应该有助于调试它,并且如果您仍然在评论中发布该问题,并说出 NSLog() 打印什么。

于 2012-12-28T01:22:56.230 回答
0

行。我已经解决了。我不知道为什么这会有所不同,但确实如此。

在我调用 hidesBackButton 的同一个运行循环中,我还调用了:

[self.view addSubview:self.chessBoardViewController.view];

这似乎是以某种方式搞砸了导航栏的那条线。如果我删除这条线,它会完美运行。所以我找到的解决方案是将这一行替换为:

[self.view performSelector:@selector(addSubview:) withObject:self.chessBoardViewController.view afterDelay:0];

我不知道为什么会这样,所以如果有人对可能发生的事情有任何见解,请发表评论。

于 2012-12-28T04:41:41.017 回答