如何在推送前关闭模型视图控制器?

Posted

技术标签:

【中文标题】如何在推送前关闭模型视图控制器?【英文标题】:How to Dismiss Model View Controller before push? 【发布时间】:2015-12-10 08:58:20 【问题描述】:

目前我的情况是这样的,

View Controller(VC1)  -->  Push Segue --> View Controller(VC2)
          |                                   ^ 
          | Model Segue                       |
          |                                   | Push Segue
          |-----> View Controller(VC3)  ------|         

现在在VC3 中,当我推入VC2 时,我想关闭VC3 视图控制器和 在VC2 后退按钮之后应该是VC1's 后视图控制器我想弹出VC3

我想要的是当我从 VC3 推 VC2 时我想删除 VC3,然后它应该出现 VC1

Check Example

我是这样做的,谁能帮帮我

视图控制器 (VC3)

- (void)callWebservice 

   [self dismissViewControllerAnimated:YES completion:^

         [self performSegueWithIdentifier:@"showVC2" sender:self];
   ];


提前致谢

【问题讨论】:

我认为我们别无选择。 @CongTran 我想弹出 VC3,然后我想推送到 VC2 我不明白这个问题.. 上面的代码会做你想做的事.. 不明白 @Daij-Djan 我想要的是当我从 VC3 推送 VC2 时我想删除 VC3,然后它应该出现 VC1 【参考方案1】:

我认为你可以这样实现:

当您在屏幕 3 时,您想要推送屏幕 2。您将关闭屏幕 3 并调用代理返回屏幕 1。 您将从 screen1 将视图推送到 screen2。

您可以查看我的演示以了解我的想法:Demo Pushview Swift

DemoPushViewObj

【讨论】:

你可以在目标 C 中做吗? @BlackCop 没关系。等我,我会在 Objetive-c 中给你演示。 是的,我可以看到,但我的情况与您不同,请查看演示 s000.tinyupload.com/index.php?file_id=69811463087160928732 @BlackCop 啊,我明白了。你要推。在这种情况下,我已经修改了代码。检查一下。 它工作正常,但是当我们要从 VC3 推送到 vc2 时出现一个问题,然后一点点 VC1 正在显示如何隐藏该问题?【参考方案2】:

如果您使用 segue,我认为您正在寻找 https://***.com/a/21415225/1320305,要手动执行此操作,请尝试以下操作:

你可以试试这个

 // locally store the navigation controller since
 // self.navigationController will be nil once we are popped
 UINavigationController *navController = self.navigationController;

 // retain ourselves so that the controller will still exist once it's popped off
 [[self retain] autorelease];

 // Pop this controller and replace with another
 [navController popViewControllerAnimated:NO];//not to see pop

 [navController pushViewController:aViewController animated:YES];
//to see push or u can change it to not to see.

或者试试这个

UIViewController *newVC = [[UIViewController alloc] init]; // Replace the current view controller 
NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:[[self navigationController] viewControllers]];
[viewControllers removeLastObject]; 
[viewControllers addObject:newVC]; 
[[self navigationController] setViewControllers:viewControllers animated:YES];

【讨论】:

我认为这行不通,因为看到我做的这件事 我没找到你,我必须在哪里做这个? 我认为在您的 callWebservice 方法调用中。删除当前代码并放置任何一个选项。 您是否遇到任何错误或您可以分享更多代码摘录? 让我们continue this discussion in chat。

以上是关于如何在推送前关闭模型视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章

如何从关闭命令访问前一个视图控制器

在关闭作为模型视图本身的视图 1 时呈现视图(全屏)控制器

如何关闭已呈现未推送的多个视图控制器?

如何在ios中自定义推送和弹出动画时将视图传递给另一个控制器? [关闭]

关闭多个推送的视图控制器

关闭没有 NavigationController 的推送视图控制器