【问题标题】:SWRevealViewController passing parametersSWRevealViewController 传递参数
【发布时间】:2014-09-02 07:25:36
【问题描述】:

通过 SWRevealViewController 将参数从一个 ViewController 传递到另一个 ViewController。这不是在 Front Controller 和 Rear Controller 之间传递参数,而是从另一个 ViewController (firstViewController) 到 front (frontViewController. 请参阅图片以供参考。 segue(在按钮触摸时)尝试将字符串值传递给前端控制器

图片在这里:http://portwire.com/stackoverflow/storyboard.png

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    SWRevealViewController *destinationViewController = (SWRevealViewController *)segue.destinationViewController;
    UINavigationController *navegationController = (UINavigationController *)destinationViewController.frontViewController;

    //UUPS!! SWRevealViewController.frontViewController is nil

    //How to access destination UIViewController????????

    FrontViewController * frontViewController = (FrontViewController *)navegationController.topViewController;
    frontViewController.fromString = @"String from previous view";
}

【问题讨论】:

    标签: ios swrevealviewcontroller


    【解决方案1】:

    首先你需要在你的前视图中为 NSString 声明一个@property。

    比segue方法:

    -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if ([segue.identifier isEqualToString:@"showDetails"]) {
    
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        DetailViewController *dvc = segue.destinationViewController;
        dvc.str = @"Your current view's string";
    
    }
    }
    

    【讨论】:

    • 与问题无关。我在问 SWRevealViewController
    【解决方案2】:

    我认为您可以使用委托来执行此操作。

    在您的前视图控制器中定义一个协议,并让第一个视图控制器符合它。

    【讨论】:

      【解决方案3】:

      如果您在情节提要中设置前视图控制器,则在调用 loadView 之前不会在 SWRevealViewController 中分配它。只需添加

      [destinationViewController loadView];
      

      在访问destinationViewController.frontViewController之前

      【讨论】:

        【解决方案4】:

        希望对你有帮助......

            let revealViewCOntroller = segue.destinationViewController as! SWRevealViewController
            revealViewCOntroller.loadView()
            let secondVc = revealViewCOntroller.frontViewController as! SecondVC
            secondVc.loadView()
            secondVc.strToken = "messageToPass"
        

        【讨论】:

          【解决方案5】:

          使用 Swift 你可以这样做:

          • 首先,您可以在UIButtonViewController 之间创建一个segue,为此您应该使用故事板,选择您的元素并使用Ctrl 拖动到您的视图。

          • 会出现一个弹窗,之后你必须选择Custom

          然后在 Main.storyboard 上选择新的转场

          • 然后在你的右边板上你必须用SWRevealViewControllerSeguePushController初始化一个Identifier和一个Class

          • 最后你像这样在视图控制器中添加你的参数。

            class NewViewController: UIViewController {
                var myParam: String!
            }
            

          并通过这种方式发送参数:

              override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
                  if (segue.identifier == "showMyNewView") {
                      let detailScene = segue.destinationViewController as! NewViewController
                      detailScene.myParam = "ParamToSend"
                  }
              }
          

          希望对你有帮助,

          【讨论】:

            【解决方案6】:

            我有第一个LoginViewController -> SWRevealViewController -> NavigationController -> HomeViewController(HomeViewController是frontViewController)

            从 LoginViewController 到 SWRevealViewController 我有一个转场。为了传递数据,我在prepareForSegue 中使用了适合我的代码。

            if ([[segue identifier] isEqualToString:@"homeVC"]) {
            
               SWRevealViewController *destination = [segue destinationViewController];
               [destination loadView];
               UINavigationController *navViewController = (UINavigationController *) [destination frontViewController];
            
               if ([navViewController.topViewController isKindOfClass:[HomeViewController class]]) {
            
                    HomeViewController* homeVC = (HomeViewController*)navViewController.topViewController;
                    homeVC.title = @"Test1";
                            } }
            

            希望对你有所帮助!

            【讨论】:

              【解决方案7】:

              对于 Swift 3.0:

              1. 您必须将 SWRevealViewController 的 storyBoardId 命名为您想要的任何东西,在此示例中:“SWRevealViewController”

              2. 按照下面的代码:

                let storyboard = UIStoryboard(name: "Main", bundle: nil)
                let revealVc = storyboard.instantiateViewController(withIdentifier :"SWRevealViewController") as! SWRevealViewController
                revealVc.loadView()
                let navViewController = revealVc.frontViewController as! UINavigationController
                if (navViewController.topViewController?.isKind(of: MainVc.superclass()!)) {
                let mainVc = navViewController.topViewController as! MainVc
                mainVc.email = email
                }
                self.present(revealVc, animated: true, completion: nil)
                

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2017-11-14
                • 1970-01-01
                • 1970-01-01
                • 2018-03-01
                • 2016-07-24
                • 2015-02-23
                • 2015-12-14
                相关资源
                最近更新 更多