【问题标题】:Pop SWRevealViewController弹出 SWRevealViewController
【发布时间】:2015-03-06 08:43:35
【问题描述】:

我正在使用 SWRevealViewController 构建一个滑动菜单。在访问菜单之前,会显示一个登录视图以允许用户登录。现在我想让用户断开连接并再次显示登录视图。我的问题是如何弹出 SWRevealViewController。

在登录后提供对应用程序的访问的代码是:

MainViewController *vMainMenu = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
    vMainMenu.strURL = URL;
    LeftMenu *vLeftMenu = [[LeftMenu alloc] initWithNibName:@"LeftMenu" bundle:nil];

    UINavigationController *principalNavController = [[UINavigationController alloc] initWithRootViewController:vMainMenu];
    UINavigationController *rearNavController = [[UINavigationController alloc] initWithRootViewController:vLeftMenu];

    SWRevealViewController *mainRevealController = [[SWRevealViewController alloc] initWithRearViewController:rearNavController frontViewController:principalNavController];

    mainRevealController.delegate = self;

    self.viewController = mainRevealController;

    principalNavController.navigationBar.hidden = YES;
    rearNavController.navigationBar.hidden = YES;

    self.window.rootViewController = self.viewController;

此解决方案不起作用:

[self.revealViewController.navigationController popViewControllerAnimated:YES];
Splash *vSplash = [[Splash alloc] initWithNibName:@"Splash" bundle:nil];
[self.navigationController pushViewController:vSplash animated:YES];

你能帮帮我吗

谢谢。

【问题讨论】:

  • 您的问题解决了吗?
  • 是的,我做到了。但这并不是最好的解决方案,我禁用了 panGestureRecognizer 和 tapGestureRecognizer 然后我推送了 splashScreen: [self.revealViewController.navigationController popViewControllerAnimated:YES]; [revealController panGestureRecognizer].enabled = NO; [revealController tapGestureRecognizer].enabled = NO;
  • 我尝试弹出它,但它只显示一个空白屏幕。无论如何我都会尝试你的解决方案。谢谢。

标签: ios slidingmenu swrevealviewcontroller popviewcontrolleranimated


【解决方案1】:

你不能通过 pop 回到你的 LoginViewController。您可以添加不带动画的 PresentViewController 来执行此操作。

Splash *vSplash = [[Splash alloc] initWithNibName:@"Splash" bundle:nil];
[self presentViewController: vSplash animated:NO completion:nil];

【讨论】:

    【解决方案2】:

    我有同样的问题。我已经实现了几个故事板。

            let storyboard = UIStoryboard(name: "Login", bundle: nil)
            let startcontroller = storyboard.instantiateViewControllerWithIdentifier("LoginVC") as UIViewController
            window?.rootViewController = startcontroller
    

    通过这个 sn-p 你可以访问正确的视图控制器。

    【讨论】:

      【解决方案3】:

      您可以使用“展开转场”。 unwinding segue 就像一个常规的 segue,它向后而不是向前。

      首先,进入Login View Controller,添加如下方法:

      -(IBAction)unwindToLoginScreen:(UIStoryboardSegue *)segue {
      }
      

      方法可以为空,可以有任何名称;最好使用描述性名称,因为您的代码中可能有许多展开的转义,能够区分它们会很有用。

      这个 unwind 方法将作为一个全局常量,对故事板上的所有视图控制器可见。

      现在,在每个应该能够返回登录屏幕的视图控制器上创建一个 Unwind Segue。您可以在 Storyboard 上执行此操作:

      1. 选择你想要的视图控制器;在顶部栏上,您应该会看到三个按钮,一个代表 View Controller,另一个代表 First Responder,另一个代表 Exit。
      2. Ctrl+拖动从视图控制器按钮到退出按钮。将出现一个上下文菜单,其中会列出您在情节提要上创建的所有可见展开方法。
      3. 在文档大纲上,视图控制器将出现“展开转场”。您可以向该 segue 添加标识符(例如您的情况下的“登录”)。然后调用 performSegueWithIdentifier。选择您在登录视图控制器上创建的那个。

      这样做,视图控制器和登录视图控制器之间的完整堆栈将被展开。也就是说,所有堆叠在 Login 视图控制器之上的视图控制器都会被弹出。

      您也可以将 prepareForSegue 用于展开转场,就像将它们用于常规转场一样。如果你想对 segue 做一些事情,你可以在 -(IBAction) 方法中添加代码。

      【讨论】:

        猜你喜欢
        • 2015-10-20
        • 2015-09-14
        • 2017-01-03
        • 2014-08-22
        • 2017-05-20
        • 2014-07-17
        • 2018-01-24
        • 2014-06-30
        相关资源
        最近更新 更多