更改UISplitView中的主视图和详细视图

4
在我的故事板中,我的项目从一个分割视图开始,该视图自动将我的自定义UITableViewController(嵌入导航控制器)分配为详细视图控制器(通过关系segue完成)。我如何从我的自定义UITableViewController访问分割视图控件,以便根据需要更改主视图控制器视图?
1个回答

8

UIViewController有一个属性splitViewController,它是指viewController嵌入的分割视图控制器的引用。由于您的表格视图控制器嵌入在导航控制器中,而导航控制器本身又嵌入在分割视图控制器中,因此您需要先获取对导航控制器的引用,然后从中获取其对分割视图的引用。

因此,在自定义tableViewController的代码中,您可以这样做:

UISplitViewController *splitVC = [[self navigationController] splitViewController];

你可以通过获取一个对masterViewController的引用来进行操作。splitViewController有一个名为viewControllers的属性,它是一个包含两个元素的NSArray。索引为零的元素是master viewController,索引为1的元素是你的detail view controller。

UIViewController *masterVC = [[splitVC viewControllers] objectAtIndex:0];

请注意,如果您的主视图控制器是自定义的视图控制器子类(这很可能是),则在从数组中提取它时,应将其转换为相应的类型。
如果您想要完全替换主视图控制器为新的视图控制器,则可以通过创建一个包含新主VC和现有详细视图控制器的新数组,并将其赋值给您的分割视图控制器的viewControllers属性来实现。
UIViewController *detailVC = [[splitVC viewControllers] objectAtIndex:1];
NSArray *newViewControllerArray = [NSArray arrayWithObjects:newMasterVC, detailVC, nil];
splitVC.viewControllers = newViewControllerArray;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接