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

时间:2014-12-26 16:13:00

标签: ios objective-c slide swrevealviewcontroller pass-data

我正在使用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]时得到了答案。我认为这是因为所有这些都是SWRevealViewController类型,不是吗?并且,prepareForSegue根本没有被调用,但一切都正常显示

对我来说,主要的问题是,如何在我的旁边菜单和我的" main"之间传递数据? (又名前方)控制器(另一种方式也可以)?

感谢

3 个答案:

答案 0 :(得分:5)

我得到了答案。您无法通过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;
}

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

答案 1 :(得分:0)

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

@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;

答案 2 :(得分:0)

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";
    } 
}