后退按钮没有出现在UINavigationController上 - 无法调试

时间:2012-12-27 23:40:54

标签: objective-c uinavigationcontroller back-button uinavigationitem

导航控制器上的后退按钮有时不会出现。请注意,有时它确实如此,所以在其他地方的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。当我删除这些行时,新的视图控制器有一个后退按钮。为什么一个视图控制器的导航项会影响下一个的导航项?

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

2 个答案:

答案 0 :(得分:1)

也许您可以更好地解决调试它的问题。您认为引导您的按钮是:

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

但是,如果您想在导航控制器的导航栏中找到该按钮,那就没有了:

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

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

self.navigationItem.hidesBackButton = NO;  

请改为尝试:

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

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

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

答案 1 :(得分:0)

确定。我已经解决了。我不知道为什么会有所作为,但事实确实如此。

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

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

这似乎是以某种方式搞砸了导航栏的界限。如果我删除此行,它将完美地工作。所以我找到的解决方案是用以下内容替换这一行:

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

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