0

DetailView (UISplitView の rightView) 内に複数の ViewControllers を持つ UISplitView を持つソリューションを探しています。

Apple の例は問題なく動作しますが、ストーリーボードの代わりに 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を実装すると空白があります

4

1 に答える 1

0

答えを探していると、同じ問題を抱えている人がたくさん見つかりました。私はそれを自分で考え出したので、ここに私の解決策があります。他の人にも役立つことを願っています。

ステップ 1. SplitViewController プロジェクトを作成します。すでにプロジェクトがある場合は、この手順をスキップしてください ;) ここに画像の説明を入力

ステップ 2. 2 つの異なる viewController を追加します。この場合、私はそれらを AbcViewController と XyzViewController と呼びます。 ここに画像の説明を入力 ここに画像の説明を入力

ステップ 3. iPad ストーリーボードに移動し、ストーリーボードから DetailViewController を削除します。次に、2 つの新しい viewController を追加します。

ここに画像の説明を入力

ステップ 4. viewController のクラスと Storyboard ID を設定します。 ここに画像の説明を入力

ステップ 5. MasterViewController.h に移動し、コードを以下のコードに置き換えます。

#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 ファイルに移動し、次のコードに置き換えます。

注:既存のプロジェクトがあり、置き換えたくない場合は、手順 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

ステップ 7。

- (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;
        }
    }

それだけです。プロジェクトを実行して楽しんでください:)

于 2014-03-19T10:56:48.087 に答える