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_front
和sw_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"; } }