【问题标题】:SWRevealViewController version 2.4.0 segue not working iosSWRevealViewController 版本 2.4.0 segue 不工作 ios
【发布时间】:2015-12-01 07:40:42
【问题描述】:

在以前版本的 SWRevealViewController 中,我创建了 SWRevealViewControllerSegue class 的 segue,而在 prepareforSegue 中,我使用了以下代码。

#pragma mark - Navigation
- (void) prepareForSegue: (UIStoryboardSegue *) segue sender: (id) sender
{
    if ( [segue isKindOfClass: [SWRevealViewControllerSegue class]] )
    {
        SWRevealViewControllerSegue *swSegue = (SWRevealViewControllerSegue*) segue;
        swSegue.performBlock = ^(SWRevealViewControllerSegue* rvc_segue, UIViewController* svc, UIViewController* dvc) {
            UINavigationController* navController = (UINavigationController*)self.revealViewController.frontViewController;
            [navController setViewControllers: @[dvc] animated: NO ];

            [self.revealViewController setFrontViewPosition: FrontViewPositionLeft animated: YES];
        };

    }
}

在新版本的SWRevealViewController中,没有segue SWRevealViewControllerSegue 类。取而代之的是一个名为 SWRevealViewControllerSetSegue 。我创建了这个类的一个segue,但是 导航没有发生。

上面的代码不能在新版本中使用,因为它已被弃用。我应该在prepareforSegue中使用什么?

我该怎么做才能执行导航?请帮助。

【问题讨论】:

  • 这是出于示例目的而给出的,但 SWLRevalViewCOntroller 不需要它
  • 你不需要这样做,只需创建一个自定义 segue 并从 SWRevealViewController 设置类。有两个类可供使用SWRevealViewControllerSegueSetControllerSWRevealViewControllerSeguePushController,它可以工作。欢呼快乐编码
  • 那么set controller和pushcontroller segue有什么区别呢?
  • 我认为这个问题很棒,并且会尝试对我一直在尝试的内容进行更改。

标签: ios objective-c iphone swrevealviewcontroller


【解决方案1】:

试试下面的代码

 UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    SWRevealViewController *revealVC = (SWRevealViewController *)[storyBoard instantiateViewControllerWithIdentifier:@"revealVCID"];
    [self presentViewController:revealVC animated:YES completion:nil];

【讨论】:

    【解决方案2】:

    你可以用这个

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    
        if([segue isKindOfClass:[SWRevealViewControllerSegueSetController class] ]){
    
            UIViewController *dvc = [segue destinationViewController];                
            UINavigationController *navCtrl = (UINavigationController *) self.revealViewController.frontViewController;        
            [navCtrl setViewControllers:@[dvc] animated:NO];        
            [self.revealViewController setFrontViewPosition:FrontViewPositionLeft animated:YES];
    
    }
    

    【讨论】:

      【解决方案3】:

      这个适合我

      UIStoryboard *sb;
      
      if (IS_IPAD) {
          sb = [UIStoryboard storyboardWithName:@"iPad_Main" bundle:nil];
      } else {
          sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
      }
      
      
      if ([segue isKindOfClass:[SWRevealViewControllerSegueSetController class]]) {
      
          UINavigationController* navController = (UINavigationController*)self.revealViewController.frontViewController;
          [navController setViewControllers: @[[sb instantiateViewControllerWithIdentifier:@"create"]] animated: NO ];
          [self.revealViewController setFrontViewPosition: FrontViewPositionLeft animated: YES];
      
      }
      

      【讨论】:

        【解决方案4】:

        Subhash Sharma 的评论是正确的。我们不必在 prepareforSegue 中为导航编写任何代码。

        只需创建一个 SWRevealViewControllerSeguePushController 类型的 segue 并在需要时执行此转场。它很简单。

        【讨论】:

        • 我的问题是segue在较新的版本中不起作用。我创建了一个 SWRevealViewControllerSetSegue 类的segue,但导航没有发生。我认为prepareforsegue方法中应该有一些代码这个 segue 可以工作。但是我使用 SWRevealViewControllerSetSegue 而不是 SWRevealViewControllerSeguePushController 是我的错误。它解决了我的问题。
        • 如果你知道set controller和pushcontroller的区别,请在这里解释一下。
        猜你喜欢
        • 2017-03-23
        • 2016-10-04
        • 1970-01-01
        • 2014-11-23
        • 2018-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多