UISplitView с несколькими ViewControllers в DetailView (раскадровка)

Я ищу решение, чтобы иметь UISplitView с несколькими ViewControllers внутри DetailView (правый вид 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


person Maurice    schedule 17.03.2014    source источник


Ответы (1)


Во время поиска ответа я нашел много людей с такой же проблемой. Я понял это сам, так что вот мое решение. Я надеюсь, что это полезно для других людей.

Шаг 1. Создайте проект SplitViewController. Если у вас уже есть проект, пропустите этот шаг ;) введите здесь описание изображения

Шаг 2. Добавьте два разных viewController'а. В этом случае я называю их AbcViewController и XyzViewController. введите здесь описание изображениявведите здесь описание изображения

Шаг 3. Перейдите к раскадровке iPad, удалите из раскадровки DetailViewController. Затем добавьте два новых viewController.

введите здесь описание изображения

Шаг 4. Установите класс и идентификатор раскадровки для ваших контроллеров представления. введите здесь описание изображения

Шаг 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;
        }
    }

Вот и все, запускайте свой проект и наслаждайтесь :)

person Maurice    schedule 19.03.2014