我可以将视图控制器推送到后端的 UINavigationController
Posted
技术标签:
【中文标题】我可以将视图控制器推送到后端的 UINavigationController【英文标题】:Can I push a viewcontroller to a UINavigationController in backend 【发布时间】:2011-05-31 04:24:42 【问题描述】:我的应用的根视图控制器是一个导航控制器,一个 ImagePickerController 被呈现为模态视图控制器。选择图像后,我想将视图控制器推送到根导航控制器之前 ImagePickerController 被解雇。 这可能吗?感谢您的任何提示:)
=================== 我曾尝试在 ImagePickerController 被解除之前推送一个新的视图控制器。但它没有被推送,似乎 UINavigationController 只有当它是当前的顶视图控制器时才能用于推送/弹出。 @巴拉 如果我先关闭 ImagePickerController,然后推送一个视图控制器,就会有两个动画。烦人~
【问题讨论】:
【参考方案1】:好吧,如果您要求在当前视图控制器之上推送一个视图控制器,那么您可以这样做
[self.navigationController pushViewController:controller animated:YES];
当图像选择器在此方法中被关闭时
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
[[picker parentViewController] dismissModalViewControllerAnimated:YES];
...
[self.navigationController pushViewController:controller animated:YES];
....
如果您要求显示根视图控制器,则可以使用此方法
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated
但是,如果您要求将视图控制器推送到堆栈底部,那么没有可用的文档记录方法。
【讨论】:
我的问题是如何在后端推送视图控制器(标记为 VC1),以便在 UIImagePickerController 消失之前已经推送了 VC1。如果没有,会有两个动画(一个是 UIImagePickerController 消失,另一个是推 VC1),这看起来不太好。 @Fourj 可以将动画设置为 NO 来推送视图【参考方案2】:我假设您从导航控制器堆栈中的控制器呈现图像选择器控制器。因此,如果您已将 imagepicker 的委托设置为提供 imagepicker 控制器的控制器,则可以在 imagepicker 委托方法中执行以下操作:
[self.navigationController pushViewController:newController animated:NO];
//Now dismiss imagepicker controller
[picker.parentViewController dismissModalViewControllerAnimated:YES];
【讨论】:
【参考方案3】:要从根视图控制器推送视图控制器,您只需要设置一个委托。基本上,在您的模态视图控制器的标题中,插入
id delegate;
和
@property (nonatomic, assign) id delegate;
在实现文件中综合。
当您创建要呈现的模态视图控制器时,设置myModalViewController.delegate = self;
。现在您可以从您的委托调用根视图控制器中的方法。例如,您可以在根视图控制器中有一个名为 pushVC
的方法,因此在关闭模态视图控制器之前,您可以从其中调用 [self.delegate pushVC];
,它将执行您在该方法中拥有的任何内容,例如代码从模态视图控制器下方推送视图控制器。您可能希望在模态视图控制器中为您的委托方法设置一个@protocol
以减轻任何警告,但没有它应该可以正常工作
【讨论】:
以上是关于我可以将视图控制器推送到后端的 UINavigationController的主要内容,如果未能解决你的问题,请参考以下文章
UINavigationController 在将 3 个视图推送到堆栈后崩溃
将视图控制器推送到另一个视图控制器时如何处理 UIParallaxDimmingView?
如何将新的 viewController 推送到另一个视图控制器中的现有视图中?