调整 UINavigationController ViewControllers NSArray 的顺序

Posted

技术标签:

【中文标题】调整 UINavigationController ViewControllers NSArray 的顺序【英文标题】:Tweaking the order of UINavigationController ViewControllers NSArray 【发布时间】:2012-11-18 19:10:32 【问题描述】:

我想使用“HomeScreen”启动我的应用程序,该屏幕(以及其他一些选项)显示一个按钮来选择图像并使用上一个会话中的某些图像继续编辑。

按钮:选择 按钮:编辑

在选择“编辑”时,它将将用户带到编辑视图,使用导航控制器等。到目前为止很好 选择“Pick”时会显示 ios imagePickerController 等。

但是,在选择图像后,我不想返回“主屏幕”。当 UIImagePickerController 被解除时,它需要“发现”“编辑”视图,就好像它已被插入到 UIImagePickerController 下方的“ViewControllers NSArray”中一样。

“编辑”阶段的“返回”按钮总是将用户带回“主屏幕”,因此即使通过图像选择器进入此屏幕,它仍然必须返回“主屏幕”

“HomeScreen”需要作为后退按钮的原因之一是该应用程序将是免费应用程序,但在 HomeScreen 将可以选择执行 IAP 以解锁更多功能,更像是“关于”等等……

那么...我该如何调整导航控制器的顺序

或者有更好的方法从 A 到 B 到 C 再回到 A(或从 A 到 C 再回到 A)

【问题讨论】:

【参考方案1】:

在场景的左上角为“C”添加一个条形按钮项(这将覆盖自动放置在那里的后退按钮)。

接下来为该按钮创建一个 IBAction,执行如下操作:

- (IBAction)goToA:(id)sender 
    [self.navigationController popToRootViewControllerAnimated:YES];
 

【讨论】:

哇。这比我预期的要简单得多(就像我几天来挣扎的任何事情一样) - 但是我不必解雇 UIImagePicker,而是必须对“C”进行新的转义。 --- 当点击“C”中的“后退按钮”并将其设置为动画时:是的,是否会一个接一个地滑回所有 ViewController,或者一次全部滑回并直接滑到“RootViewController”? 这个方法立即进入根视图控制器,并从导航器堆栈中弹出所有其他方法。 毕竟这并不难,它更容易,请看下面我自己的答案【参考方案2】:

homeViewController.m 内部,只需为segues 设置正确的东西: 拖入 viewController 并将其连接到“编辑”按钮,InterfaceBuilder 创建 segue 并为其提供标识符presentImageEditorViewController。然后像往常一样,在实现文件中设置segues(为了方便,我跳过了设置imagePicker等的部分)。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
    if ([segue.identifier isEqualToString:@"presentImagePickerController"]) 
        [segue.destinationViewController setDelegate:self];
        NSLog(@"Presenting ImagePickerController");
    
    else if ([segue.identifier isEqualToString:@"presentImageEditorViewController"]) 
        NSLog(@"Presenting ImageEditorController");
    


-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
    NSLog(@"Picked some image");
    [self performSegueWithIdentifier:@"presentImageEditorViewController" sender:self];
    [self dismissViewControllerAnimated:YES completion:nil];

在 imagePicker 中选择图像时,它调用委托方法 didFinish… 并简单地将 segue 设置为 ImageEditorVieController 然后关闭 ImagePickerController,后退按钮在 imageEditor 中就可以了导航栏

【讨论】:

以上是关于调整 UINavigationController ViewControllers NSArray 的顺序的主要内容,如果未能解决你的问题,请参考以下文章

调整 UINavigationController 的大小?

使用 UINavigationController setToolbarHidden:animated 时如何调整视图大小:

使用平移关闭 UINavigationController 调整 UINavigationBar 相对于顶部安全区域的大小

如何在 UITabBarViewController 内的 UINavigationController 内调整 UITableView 的大小?

UINavigationController 总是全屏不调整大小

当 UISplitViewController 旋转为纵向时,如何调整 UINavigationController 内容的大小