从uisplitview更改主视图和详细视图

Mik*_*ike 4 xcode objective-c ipad uisplitviewcontroller ios

在我的故事板上,我的项目以分割视图开始,自动分配我的自定义UITableViewController(嵌入在导航控制器中)作为详细视图控制器(由关系segue完成).如何从我的自定义访问拆分视图控件,UITableViewController以便我可以根据需要更改主视图控制器视图?

jon*_*oll 7

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

所以在你的自定义tableViewController的代码中你可以这样做:

UISplitViewController *splitVC = [[self navigationController] splitViewController];
Run Code Online (Sandbox Code Playgroud)

你可以从中获得对masterViewController的引用.splitViewController有一个属性viewControllers,它是两个元素的NSArray.索引为零的元素是主viewController.索引1处的元素是您的详细视图控制器.

UIViewController *masterVC = [[splitVC viewControllers] objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)

请注意,如果您的master是自定义viewController子类(可能是它),那么当您将其从数组中拉出时,应该将其强制转换为它.

如果要完全使用新的viewController重新关联主视图控制器,可以通过使用新的主VC和现有的详细视图控制器创建新数组并将其分配给拆分视图控制器的viewControllers属性来实现:

UIViewController *detailVC = [[splitVC viewControllers] objectAtIndex:1];
NSArray *newViewControllerArray = [NSArray arrayWithObjects:newMasterVC, detailVC, nil];
splitVC.viewControllers = newViewControllerArray;
Run Code Online (Sandbox Code Playgroud)