Как мне создать UISplitView вручную? - PullRequest
3 голосов
/ 18 мая 2010

У меня есть приложение, которое будет переходить к UISplitView (внутри другого представления в целом), например так:

- (void) switchToMyDayView {
    NSLog(@"Show My Day Screen");

    if (self.myDayController.view.superview == nil) {
        if (self.myDayController == nil) {
            MyDayController *myController = [[MyDayController alloc] initWithNibName:@"MyDay" bundle:nil];
            self.myDayController = myController;
            [myController release];
        }

        [homeScreenController.view removeFromSuperview];
        [self.view insertSubview:self.myDayController.view atIndex:0];
    }
}

Что делается на главном экране навигации

Теперь у MyDayController есть XIB с именем MyDay.xib, который имеет следующие элементы:

* +1007 *

Владелец файла: MyDayController

Первый ответчик: UIResponder

Split View Controller

 ---->Navigation Controller

         ---->Navigation Bar

         ----> Table View Controller

                 ----> Navigation Item

 ---->View Controller

Итак, мне нужны еще некоторые компоненты, мне нужен UITableViewController и UISplitViewControllerDelegate правильно?

Я собирался просто реализовать эти протоколы в моем MyDayController, это своего рода стандарт?

Итак, после кода выше я получаю сообщение об ошибке:

- [UIViewController _loadViewFromNibNamed: bundle:] загрузил перо «MyDay», но выход представления не был установлен.

Итак, как я могу это исправить с помощью UISplitViewController? Я знаю, что UISplitViewController имеет свойство view, но я не могу его использовать / подключить его в IB, могу ли я?

Большое спасибо

Mark

Ответы [ 4 ]

5 голосов
/ 09 декабря 2010

Вам не нужно создавать подкласс UISplitViewController. Какое поведение в вашем классе "MyDayController"? UISplitViewController, в основном, просто обрабатывает для вас основные и подробные представления, поэтому вы должны реализовать эти контроллеры.

Если разделенное представление находится на верхнем уровне вашего приложения, вы можете добавить его в перо главного окна вашего приложения. Если это не так, просто создайте его программно:

- (void) switchToMyDayView {
    NSLog(@"Show My Day Screen");

    if (self.myDayController == nil) {
        YourMasterViewController *masterViewController = [[YourMasterViewController alloc] initWithNibName:@"MasterView" bundle:nil];
        YourDetailViewController *detailViewController = [[YourDetailViewController alloc] initWithNibName:@"DetailView" bundle:nil];
        UISplitViewController *myController = [[UISplitViewController alloc] init;
        myController.viewControllers = [NSArray arrayWithObjects:masterViewController, detailViewController, nil];
        [masterViewController release];
        [detailViewController release];

        self.myDayController = myController;
        [myController release];         
    }

    [homeScreenController.view removeFromSuperview];
    [self.view insertSubview:self.myDayController.view atIndex:0];
}

Вам также не нужен тест для self.myDayController.view.superview == nil, поскольку он подразумевается в self.myDayController == nil

1 голос
/ 06 октября 2012

Спасибо, Кристофер Пикслей. Это решение работает для меня, но я должен исправить то, что вы дали. Пожалуйста, смотрите мой код ниже.

Делегатский файл

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    LeftViewController *leftViewController = [[LeftViewController alloc] init];// initWithNibName:@"LeftViewController" bundle:nil];
    RightViewController *rightViewController = [[RightViewController alloc] initWithNibName:@"RightViewController" bundle:nil];
    UISplitViewController *myController = [[UISplitViewController alloc] init];
    myController.viewControllers = [NSArray arrayWithObjects:leftViewController, rightViewController, nil];

    self.window.rootViewController = myController;

    [self.window makeKeyAndVisible];
    return YES;
}

Надеюсь, это поможет.

0 голосов
/ 02 февраля 2011

, если вы хотите создать с помощью контроллера навигации как в мастер, так и в деталях, тогда вы можете сделать это

self.rootViewController=[[RootViewController alloc]init];
    self.detailViewController=[[FirstDetailViewController alloc]init];

    UINavigationController *rootNav=[[UINavigationController alloc]initWithRootViewController:rootViewController];
    UINavigationController *detailNav=[[UINavigationController alloc]initWithRootViewController:detailViewController];

    self.splitViewController.viewControllers=[NSArray arrayWithObjects:rootNav,detailNav,nil];
    self.splitViewController.delegate=self.detailViewController;
0 голосов
/ 19 мая 2010

Я дал ответ на аналогичный вопрос здесь .

Надеюсь, это поможет.

Спасибо, Madhup

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...