iOS SWRevealViewController – 在控制器之间传递数据

我正在使用SWRevealViewController在我的应用程序中实现一个幻灯片菜单(从左侧)。 一切工作正常,但现在我面临一个小问题。我想传递数据从我的“主”视图控制器(一个是完全可见的,我不叫它“frontViewController”,因为它似乎不是前面一个)。 我尝试了所有可能的方式来访问滑动菜单控制器并将数据传递给它。 这是我曾经试过的:

(MyControllerClass*)self.revealViewController.rearViewController (MyControllerClass*)self.revealViewController.frontViewController 

比我尝试的东西像self.revealViewController.navigationController[0]self.revealViewController.navigationController[1] ,也是这样, self.revealViewController.viewControllers[0]self.revealViewController.viewControllers[1] 。 下一步是实现prepareforsegue并监听segue标识符sw_frontsw_rear 。 但在这些情况下,我检查isKindOfClass[MyControllerclass class]时是真的。 我认为这是因为所有这些都是SWRevealViewControllertypes,不是吗? 而且,“准备赛报”根本就不会被人打电话,但是一切都显示得很好

主要问题是,我怎么能在我的侧面菜单和我的“主”(前面)控制器(另一种方式也可以)之间传递数据?

谢谢

我得到了答案。 您不能通过SWRevealViewController直接访问您自己的控制器(因为它已连接到NavigationController)。 首先你得到你想要的navigationController,通过它们访问你的控制器(并传递数据)。 这是理论的代码:

 UINavigationController* rearNavigationController = (UINavigationController*)self.revealViewController.rearViewController; //here you get the navigationController which is connected to the controller you want, in my case i want the rear controller if ([rearNavigationController.topViewController isKindOfClass[MyCustomViewController]]) { MyCustomViewController* iWantYouController = (MyCustomViewController*)rearNavigationController.topViewController; } 

这就是它。 现在您可以访问(并设置)您的自定义控制器上的每个属性

在appdelegate中创build一个共享对象,然后你可以通过viewContollers访问它。 在appdelegate中创build一个属性说一个

 @property (nonatomic, strong) NSArray *sharedItem; 

现在在你的firstViewContoller中设置这个对象为:

  AppDelegate *appDel = (AppDelegate*) [UIApplication sharedApplication].delegate; appDel.sharedItem = firstControllerObj; 

并在您的目标VC访问对象为:

 AppDelegate *appDel = (AppDelegate*) [UIApplication sharedApplication].delegate; NSArray *receivingObj = appDel.sharedItem; 

LoginViewController -> SWRevealViewController -> NavigationController -> HomeViewController (HomeViewController的frontViewController)这是ViewControllers顺序通过SWRevealViewController

从LoginViewController到SWRevealViewController我使用segue。 为了传递数据,我在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"; } }