从AppDelegate访问UITableView

时间:2014-08-07 20:13:34

标签: ios objective-c

你好我正在优化我的tableview然后我得到lazytableimages项目并修改它以适用于我的数据...现在我想将uitabbarcontroller添加到项目..但问题在这里 这段代码在AppDelegate.m的末尾,它创建了UItableViewController的vaiable,然后设置了条目的值。

  // The root rootViewController is the only child of the navigation
  // controller, which is the window's rootViewController.
            RootViewController *rootViewController = (RootViewController*)[(UINavigationController*)self.window.rootViewController topViewController];

            rootViewController.entries = weakParser.appRecordList;

这段代码只是从UINavigationController访问topviewcontroller但是当我们添加tabBarController时这段代码不起作用..我想知道如何在添加uitabbarcontroller后访问tableview。 我的层次结构是 -

  1. 的UITabBarController:
    • 的UINavigationController
      • 的UITableViewController

1 个答案:

答案 0 :(得分:0)

如果你知道UITabBarController中UINavigationController的索引,你可以这样做:

UITabBarController * tabBarVC = (UITabBarController *)self.window.rootViewController;            
UINavigationController * nc = (UINavigationController *)tabBarVC.viewControllers[index];
RootViewController * rootViewController = (RootViewController *)nc.topViewController;
rootViewController.entries = weakParser.appRecordList;

但是您可以通过使用NSNotification并更新RootViewController中的记录列表来使代码更加优雅。

因此,您可以执行以下操作,而不是上面的代码:

[[NSNotificationCenter defaultCenter] postNotificationName:@"recordListDidFinish"   object:self userInfo:weakParser.appRecordList? @{@"recordList": weakParser.appRecordList}:nil];

并且,在方法" viewDidLoad"的RootViewController,添加以下行:

[[NSNotificationCenter defaultCenter] addObserverForName:@"recordListDidFinish" object:[UIApplication sharedApplication].delegate queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
    self.entries = note.userInfo[@"recordList"];
    [self.tableView reloadData];
}];

结果,无论你将窗口的rootController更改为什么,你的代码总是有效。