我需要帮助以编程方式遍历故事板层次结构。这张图片应该给出一些背景信息:storyboard。层次结构由一个 splitViewController 组成,其 master 是一个带有三个选项卡的 tabViewController。第一个选项卡包含两个容器视图,下部视图是“问题子”。
我已经成功遍历层次结构并将 masterViewController 作为选项卡 2 和 3 的委托分配给 detailViewController:
UISplitViewController *splitViewController = (UISplitViewController *) self.window.rootViewController;
UITabBarController *masterTabBarController = [[splitViewController viewControllers] objectAtIndex:0];
MasterViewController *masterViewController2 = [[masterTabBarController viewControllers] objectAtIndex:1];
MasterViewController *masterViewController3 = [[masterTabBarController viewControllers] objectAtIndex:2];
masterViewController2.delegate = detailTableViewController;
masterViewController3.delegate = detailTableViewController;
但是,由于容器视图,选项卡 1 更加令人讨厌。我的尝试没有奏效,并导致索引越界错误:
UIViewController *containerViewController = [[masterTabBarController viewControllers] objectAtIndex:0];
MasterViewController *masterViewController1 = [[containerViewController childViewControllers] objectAtIndex:1];
masterViewController1.delegate = detailTableViewController;
因此,除了 AppDelegate,我还在我的 MasterViewController 本身中尝试了另外两条路由:
- (void)viewDidLoad
{
self.delegate = (DetailTableViewController *)[[self.splitViewController.viewControllers lastObject] presentedViewController];
//self.delegate = [[self.parentViewController.parentViewController.parentViewController.childViewControllers objectAtIndex:1] objectAtIndex:0]; Granted this should ONLY work for tab 1...but it doesnt.
}
但是未注释的行返回 nil ...
所以我希望某种灵魂能够理解容器视图(因为几乎找不到关于这些的细节)以及如何通过遍历或其他技术访问和分配委托给它们。必须有更好的方法——我这里有一个非常小的应用程序;我无法想象必须单独遍历具有数十个屏幕的复杂应用程序的层次结构。
提前致谢!!