从 UIViewController 呈现 UINavigationController 没有默认取消按钮

Posted

技术标签:

【中文标题】从 UIViewController 呈现 UINavigationController 没有默认取消按钮【英文标题】:Presenting a UINavigationController from a UIViewController doesn't have default cancel button 【发布时间】:2014-01-25 02:36:23 【问题描述】:

我正在尝试从UIViewController 模态地呈现UINavigationController。根据以前的经验,我很确定当我这样做时,导航栏中默认应该有一个取消按钮,但是使用以下代码,导航栏是完全空白的。有什么想法吗?

UIViewController *rootVC = [[UIViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:rootVC];
[self presentViewController:navController animated:YES completion:nil];

【问题讨论】:

不,默认没有取消按钮。 【参考方案1】:

默认情况下,您不会获得任何条形按钮项目。您需要在呈现之前添加按钮,或者更准确地说,从根视图控制器内部添加按钮。通常,您希望设置委托,其中呈现的视图控制器通知呈现的视图控制器它应该关闭它。通常不建议从根视图控制器内部自我关闭。

【讨论】:

【参考方案2】:

– presentViewController:animated:completion: 只会将您的视图控制器呈现为模态视图控制器,即使您将其设置为导航控制器。在您的情况下,最简单的解决方案是在 navController 中将左栏按钮设置为取消按钮,并在单击该按钮时调用解除,

UIBarButtonItem *cancelButton= [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(dismissViewController)];
 navController.navigationItem.leftBarButtonItem = cancelButton;

- (void)dismissViewController

    [self dismissViewControllerAnimated:YES completion:nil];

希望这会有所帮助。

【讨论】:

以上是关于从 UIViewController 呈现 UINavigationController 没有默认取消按钮的主要内容,如果未能解决你的问题,请参考以下文章

从 SKScene 呈现 UIViewController 显示黑屏

如何从 viewController 的视图中呈现 UIViewController

如何从内容 ViewController 呈现 UIViewController?

从 UIScrollView 子视图呈现故事板 UIViewController

从 UIViewController 呈现 SKScene - Swift

从 UIViewController 方法更改 UIWindow 的呈现视图