我有一个项目使用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而不是storyboard时,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中的所有行。
使用Storyboard时出现问题。当从另一个控制器(SidePanelController)在故事板中实例化时,如何从AppDelegate中的MenuViewController访问(UITableView *)tableView?
我在didFinishLaunchingWithOptions中使用以下代码设置故事板:function:
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?
提前致谢
灰
答案 0 :(得分:1)
对于在使用JASidePanels进行侧栏导航时尝试从AppDelegate访问Storyboard视图的UITableView时遇到类似问题的任何人,我意识到上面解释了我自己的问题的解决方案。
在JASidePanelController.h文件中,更新以下行:
// set the panels
@property (nonatomic, strong) UIViewController *leftPanel; // optional
到您创建的左侧菜单视图控制器,在我的情况下:
// set the panels
@property (nonatomic, strong) MenuViewController *leftPanel; // optional
在JASidePanelController.m文件中,更新以下方法声明:
- (void)setLeftPanel:(UIViewController *)leftPanel {
到
- (void)setLeftPanel:(MenuViewController *)leftPanel {
通过执行上述操作,您可以使用AppDelegate中的以下语法与左侧菜单的tableView进行交互:
SidePanelController *panelController = (SidePanelController *)self.window.rootViewController;
[panelController.leftPanel.tableView reloadData];