设置`title`会改变UINavigationController堆栈

时间:2013-07-17 16:17:05

标签: ios objective-c cocoa-touch

我已经使用了一些正常的代码:

[self.navigationController pushViewController:subView animated:YES];

要将新视图推送到UINavigationController堆栈,但是我现在已经实现了一些重新加载视图内容然后更新标题的功能,所以我有这样的函数:

- (void)loadEntries:(NSString *)entriesToLoad
{
   //Loading code
   self.title = [entriesToLoad lastPathComponent];
}

此代码确实将标题设置为正常,但它会导致UINavigationController丢失主根视图。如果我评论该代码,它的工作绝对正常,目前我只是设置标题,当我要将新视图推入视图堆栈,并且一直工作正常。如果视图是子视图的子视图(root view - > child view - > child view),则为了增加陌生感,它似乎将第一个子视图视为根。我不确定为什么更改标题会对导航堆栈产生这样的影响。

3 个答案:

答案 0 :(得分:0)

这里一定有些混乱。我们正在讨论子视图(添加后将是子视图)或子视图控制器?这是因为:

[self.navigationController pushViewController:subView animated:YES];

期望UIViewController's子类而不是UIView's子类。


如果你想玩子视图,你可以简单地说:

[self.view addSubView:mySubView]; 

然后更改UINavigationController的标题。

答案 1 :(得分:0)

听起来不像是设置标题,也许是你正在做的其他事情。但我更喜欢在navigationItem属性上设置标题,因此它不会影响其他部分(例如tabBarItem的标题。

[self.navigationItem setTitle:[entriesToLoad lastPathComponent];

答案 2 :(得分:0)

对于那些遇到同样问题的人,我找到了原因。

如果根视图没有标题集,则导航后退按钮中的默认值通常为Back,但是如果您在子viewController托管视图中更改标题并且根目录没有没有设定的标题会打破导航逻辑。这是UINavigationController中的错误还是我不确定的预期行为,但确保根视图有标题可以解决问题。