添加SWRevealViewController后,从appDelegate访问tableViewController

时间:2014-03-31 20:05:48

标签: ios objective-c appdelegate swrevealviewcontroller

我有一个显示简单tableview的应用程序,我也想添加SWRevealViewController。

在我的appDelegate中,在我添加SWReveal VC之前,我正在设置我的tableViewController,就像这样......

在didFinishLaunchingWithOptions中:

STRTableViewController *tableViewController = [(UINavigationController *)self.window.rootViewController viewControllers][0];
self.delegate = tableViewController;

然后再按以下方法:

- (void)loadTableViewData
{
   UINavigationController *navVC = (UINavigationController *)self.window.rootViewController;
   STRTableViewController *tableVC = navVC.childViewControllers[0];
   [tableVC loadTableData]
}

显然,当我将SWRevealViewController放到行的前面时,这不再有效,因为它现在试图从错误的视图控制器调用loadTableData。

我已经尝试了几种方法并且不断出现。现在,如果它不是第一个视图控制器,我该如何访问tableViewController?

如果您需要更多代码或日志或其他任何内容,我们很乐意发布其他信息。我觉得答案就在那里,我只是没有经验可以看到它。

另外,为了清楚起见,现在在故事板中它从Reveal View Controller到导航控制器(tableview的导航VC / sw_front)以及sw_rear VC。之前它只是从导航控制器开始。

谢谢!

1 个答案:

答案 0 :(得分:1)

有很多方法可以保留对此的参考。

最简单的方法是在AppDelegate.m

中保留对视图控制器的引用

所以你添加了一个属性

@property (nonatomic, strong) STRTableViewController *tableViewController;

然后,无论何时何地您实例化并设置该表视图控制器,只需执行以下操作:

AppDelegate *delegate = [[UIApplication sharedApplication] delegate];
delegate.tableViewController = justCreatedTableViewController;

您需要#import "AppDelegate.h"来访问您要执行此操作的其他课程中的应用代理。

然后要访问它,您可以执行以下操作:

- (void)loadTableViewData
{
   [self.tableViewController loadTableData]
}