你好我正在优化我的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。 我的层次结构是 -
答案 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更改为什么,你的代码总是有效。