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

4

我正在使用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根本没有被调用,但一切都显示得很好。

对我来说主要的问题是,我如何在我的侧边菜单和我的“主”(即前端)控制器之间传递数据(反过来也可以)?

谢谢

3个回答

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

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


嗨,我遇到了同样的问题,无法识别我的菜单视图控制器,你知道如何在Swift中做到这一点吗?您还可以发布完整segue的代码吗?您使用了哪个segue标识符?谢谢。 - Ali_bean
嗨,阿里,你解决了你的问题吗?我不使用SWIFT,但如果有帮助的话,我可以发布Objective C代码。 - user3466562
我正在尝试您的代码,但是在if([rearNavigationController.topViewController isKindOfClass[MyCustomViewController]])中出现错误。 - User558
但是你是否将MyCustomViewController更改为你的控制器名称?我只是将其用作占位符... - user3466562

0
在appdelegate中创建一个共享对象,然后您可以在不同的viewContollers中访问它。在appdelegate中创建一个属性a。
@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;

这是唯一的方法吗?我认为最好的方法不是创建一个全局变量。必须有一种方式可以访问控制器,否则,在我看来,SWRevealViewController 将毫无用处。 - user3466562

0

LoginViewController -> SWRevealViewController -> NavigationController -> HomeViewController(HomeViewController是frontViewController)这是通过SWRevealViewController传递的ViewController序列。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接