Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 设置'title'将更改UINavigationController堆栈_Ios_Objective C_Cocoa Touch - Fatal编程技术网

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
中的错误还是预期的错误行为我不确定,但确保根视图有一个标题解决了问题。

对不起,我不太清楚它在哪里说的是“子视图”我指的是“子视图控制器”。在
视图中更改标题应该足够了。因此,当您返回到根视图控制器时,标题将再次更新。就像这样:问题是当我在
视图中将其挂起将出现
它将丢失子视图控制器来自的根视图。