【发布时间】:2012-08-17 23:03:53
【问题描述】:
在我的故事板上,我的项目从一个拆分视图开始,它自动将我的自定义 UITableViewController(嵌入在导航控制器中)分配为详细视图控制器(由关系 segue 完成)。如何从我的自定义 UITableViewController 访问拆分视图控件,以便我可以根据需要更改主视图控制器视图?
【问题讨论】:
标签: objective-c ios xcode ipad uisplitviewcontroller
在我的故事板上,我的项目从一个拆分视图开始,它自动将我的自定义 UITableViewController(嵌入在导航控制器中)分配为详细视图控制器(由关系 segue 完成)。如何从我的自定义 UITableViewController 访问拆分视图控件,以便我可以根据需要更改主视图控制器视图?
【问题讨论】:
标签: objective-c ios xcode ipad uisplitviewcontroller
UIViewController 有一个属性splitViewController,它是对嵌入viewController 的拆分视图控制器的引用。由于您的表格视图控制器嵌入在导航控制器中,而导航控制器本身也嵌入在拆分视图控制器中,因此您首先需要获取对导航控制器的引用,然后从中获取对拆分视图的引用。
所以在你的自定义 tableViewController 的代码中你可以这样做:
UISplitViewController *splitVC = [[self navigationController] splitViewController];
您可以从中获取对 masterViewController 的引用。 splitViewController 有一个属性viewControllers,它是一个包含两个元素的 NSArray。索引为零的元素是主视图控制器。索引 1 处的元素是您的详细视图控制器。
UIViewController *masterVC = [[splitVC viewControllers] objectAtIndex:0];
请注意,如果您的 master 是一个自定义 viewController 子类(它可能是),您应该在将其从数组中拉出时将其强制转换。
如果您想用新的 viewController 完全替换主视图控制器,您可以通过使用新的主 VC 和现有的详细视图控制器创建一个新数组并将其分配给拆分视图控制器的 viewControllers 属性来实现:
UIViewController *detailVC = [[splitVC viewControllers] objectAtIndex:1];
NSArray *newViewControllerArray = [NSArray arrayWithObjects:newMasterVC, detailVC, nil];
splitVC.viewControllers = newViewControllerArray;
【讨论】: