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 根本没有被调用,但一切都正常显示

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

谢谢

4

3 回答 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;
}

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

于 2014-12-26T20:08:52.453 回答
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;
于 2014-12-26T18:05:32.837 回答
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";
    } 
}
于 2016-11-15T09:51:39.927 回答