我有一个使用JASidePanels的项目,其左侧菜单包含 UITableView 来更改中心面板的内容。
由于我希望能够通过自定义 URL 方案深度链接到我的控制器,因此我将视图切换功能作为 handleOpenURL: 函数的一部分移到了 AppDelegate.m 文件中。有了这个,我更新了菜单控制器的 didSelectRowAtIndexPath: 函数来调用自定义 URL,如下所示:
- (void)tableView:(UITableView *)aTableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSInteger index = indexPath.row;
NSDictionary *item = self.menu[index];
NSURL *myURL = [NSURL URLWithString:item[@"url"]];
[[UIApplication sharedApplication] openURL:myURL];
}
使用 .xibs 而不是情节提要时 AppDelegate 的 handleOpenURL: 函数如下所示:
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
if ([[url host] isEqualToString:@"goto"]) {
for (int i = 0; i < [self.leftMenuViewController.tableView
numberOfRowsInSection:0]; i++) {
[self.leftMenuViewController.tableView
deselectRowAtIndexPath:[NSIndexPath indexPathForRow:i
inSection:0] animated:NO];
UITableViewCell *deselectedCell = [self.leftMenuViewController.tableView
cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i
inSection:0]];
deselectedCell.backgroundColor = [UIColor clearColor];
}
...
}
}
当不使用情节提要并在 xib 文件中创建界面时,这可以根据需要取消选择和格式化菜单控制器上 UITableView 中的所有行。
使用故事板时出现了我的问题。当另一个控制器(SidePanelController)从情节提要中实例化时,我如何能够从 AppDelegate 中的 MenuViewController 访问(UITableView *)tableView?
我在 didFinishLaunchingWithOptions: 函数中使用以下代码设置情节提要:
self.storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:[NSBundle mainBundle]];
self.viewController = [storyboard instantiateInitialViewController];
self.window.rootViewController = self.viewController;
所以我需要访问已经实例化的 MenuViewController 实例,而不是创建控制器的新实例。我试图通过以下方式访问 tableView:
SidePanelController *panelController = (SidePanelController *)self.window.rootViewController;
UIViewController *menuViewController = (MenuViewController *)panelController.leftPanel;
UITableView *menuTableView = (UITableView *)menuViewController;
但运气不佳。是否可以从情节提要中实例化的视图中以编程方式检索 UITableView?
提前致谢
灰