Ios 设置'title'将更改UINavigationController堆栈
我有一些代码可以很好地处理这个问题:Ios 设置'title'将更改UINavigationController堆栈,ios,objective-c,cocoa-touch,Ios,Objective C,Cocoa Touch,我有一些代码可以很好地处理这个问题: [self.navigationController pushViewController:subView animated:YES]; 为了将新视图推送到UINavigationController堆栈上,我现在实现了一些功能,可以重新加载视图的内容,然后更新标题,因此我有一个类似这样的功能: - (void)loadEntries:(NSString *)entriesToLoad { //Loading code self.title =
[self.navigationController pushViewController:subView animated:YES];
为了将新视图推送到UINavigationController
堆栈上,我现在实现了一些功能,可以重新加载视图的内容,然后更新标题,因此我有一个类似这样的功能:
- (void)loadEntries:(NSString *)entriesToLoad
{
//Loading code
self.title = [entriesToLoad lastPathComponent];
}
此代码确实将标题设置为精细,但是它会导致
UINavigationController
丢失主根视图。如果我对代码进行注释,它工作得非常好,目前我只是在将新视图推送到视图堆栈上时设置了标题,并且工作得很好。如果视图是子视图的子视图,那么(根视图
->子视图
->->子视图
)似乎将第一个子视图视为根视图。我不确定为什么更改标题会对导航堆栈产生如此大的影响。这里肯定有些混乱。我们讨论的是子视图(添加后将成为子视图)还是子视图控制器?因为:
[self.navigationController pushViewController:subView animated:YES];
需要的是UIViewController的
子类,而不是UIView的
子类
如果要使用子视图,只需执行以下操作:
[self.view addSubView:mySubView];
然后更改UINavigationController的标题
听起来与设置标题无关,可能是您正在做的其他事情。但是我更喜欢在navigationItem
属性上设置标题,这样它就不会影响其他部分(例如tabBarItem
的标题)
[self.navigationItem setTitle:[entriesToLoad lastPathComponent];
对于有同样问题的人,我找出了原因
如果根视图没有设置标题,则通常默认为导航后退按钮中的Back
,但是如果随后在子viewController
托管视图中更改标题,并且根视图没有设置标题,则会断开导航逻辑。这是UINavigationController
中的错误还是预期的错误行为我不确定,但确保根视图有一个标题解决了问题。对不起,我不太清楚它在哪里说的是“子视图”我指的是“子视图控制器”。在视图中更改标题应该足够了。因此,当您返回到根视图控制器时,标题将再次更新。就像这样:问题是当我在视图中将其挂起将出现
它将丢失子视图控制器来自的根视图。