在DetailView中有多个ViewController的UISplitView(storyboard)

我正在寻找一个解决scheme,以在DetailView(UISplitView的右视图)中具有多个ViewController的UISplitView。

苹果的例子工作正常,但使用nib文件,而不是故事板。 ( https://developer.apple.com/library/ios/samplecode/multipledetailviews/Listings/ReadMe_txt.html )

我发现了另外一个例子,但是当我实现一个UITableView的时候有一些空白的东西。http ://www.dharmaworks.net/Consulting/switching-detail-views-in-uisplitviewcontroller-with-ios7

在寻找答案期间,我发现许多人有同样的问题。 我自己想出来,所以这是我的解决scheme。 我希望这对其他人有用。

第1步。创build一个SplitViewController项目。 如果你有一个项目已经跳过这一步;) 在这里输入图像说明

第2步。添加两个不同的viewControllers。 在这种情况下,我称他们为AbcViewController和XyzViewController。 在这里输入图像说明在这里输入图像说明

第3步。转到iPad的故事板,从故事板中删除DetailViewController。 然后添加两个新的viewControllers。

在这里输入图像说明

第4步 。为viewControllers设置类和Storyboard ID。 在这里输入图像说明

第5步。转到您的MasterViewController.h并用下面的代码replace代码。

#import <UIKit/UIKit.h> @class AbcViewController; @class XyzViewController; @interface MasterViewController : UITableViewController @property (strong, nonatomic) AbcViewController *abcViewController; @property (strong, nonatomic) XyzViewController *xyzViewController; @end 

第6步。现在去你的MasterViewController.m文件,并用下面的代码replace:

注意:如果您有一个现有的项目,并且不想replace使用步骤7中的代码。

 #import "MasterViewController.h" #import "DetailViewController.h" @interface MasterViewController () { NSMutableArray *_objects; } @end @implementation MasterViewController - (void)awakeFromNib { if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { self.clearsSelectionOnViewWillAppear = NO; self.preferredContentSize = CGSizeMake(320.0, 600.0); } [super awakeFromNib]; } - (void)viewDidLoad { [super viewDidLoad]; self.detailViewController = (DetailViewController*)[[self.splitViewController.viewControllers lastObject] topViewController]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } #pragma mark - Table View - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 2; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; if (indexPath.row == 0) { cell.textLabel.text = @"ABC"; } if (indexPath.row == 1) { cell.textLabel.text = @"XYZ"; } return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { self.abcViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"ABC"]; self.xyzViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"XYZ"]; if (indexPath.row == 0) { NSArray *newVCs = [NSArray arrayWithObjects:[[[self splitViewController ] viewControllers ] firstObject ] , self.abcViewController, nil]; self.splitViewController.viewControllers = newVCs; } if (indexPath.row == 1) { NSArray *newVCs = [NSArray arrayWithObjects:[[[self splitViewController ] viewControllers ] firstObject ] , self.xyzViewController, nil]; self.splitViewController.viewControllers = newVCs; } } @end 

第七步。

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { self.abcViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"ABC"]; self.xyzViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"XYZ"]; if (indexPath.row == 0) { NSArray *newVCs = [NSArray arrayWithObjects:[[[self splitViewController ] viewControllers ] firstObject ] , self.abcViewController, nil]; self.splitViewController.viewControllers = newVCs; } if (indexPath.row == 1) { NSArray *newVCs = [NSArray arrayWithObjects:[[[self splitViewController ] viewControllers ] firstObject ] , self.xyzViewController, nil]; self.splitViewController.viewControllers = newVCs; } } 

就是这样,运行你的项目,享受:)