2011-01-07 6 views
4

У нас есть определенное поведение, которое нам требуется в нашем приложении UISplitViewController. Мы имеем следующую иерархию 3-х представленийUISplitViewcontroller с мастером UINavigationController и подробно UINavigationController

  • FormOneViewController - TableViewController intialised в MasterView
  • FormTwoViewcontroller - TableViewCotnroller initalised в DetailView
  • FormThreeViewcontroller - еще не отображается.

Когда пользователь выбирает элемент в FormTwoViewController мы хотим FormThreeViewCOntroller появляться в DetailView и FormTwoViewController (текущий вид детали), чтобы стать MasterView.

Нам также необходимо иметь кнопку возврата на подробном представлении, чтобы вернуть стек диспетчеров просмотра. Поэтому, когда нажата кнопка назад, FormTwoViewController становится элементом detailView, а FormOneViewController снова становится основным.

Мы попытались реализовать это с помощью UISPlitViewcontroller и с помощью masterNavigationController и detailNavigationController. У нас начальный этап работы, когда представления отображаются правильно при запуске приложения, мы выбираем элемент FormTwoViewController и нажимаем FormThreeViewController на detailNavigationController, а FormTwoViewController помещается в стек masterNavigationController.

Проблема, которую мы теперь имеем двояка

  1. когда BackButton нажата в контроллере представления подробно он ничего не делает. похоже, обработчики отключены или что-то в этом роде.
  2. Мы не получаем кнопку в портретном режиме, чтобы отображать главное представление в popover.

У кого-нибудь есть какие-либо примеры того, как это сделать или какая-либо помощь будет оценена.

+0

Было бы полезно, если бы вы указали код. «Он толкает FormThreeViewController на detailNavigationController, а FormTwoViewController помещается в стек masterNavigationController». Очень важно точно знать, как вы это делаете. Что касается кнопки popover, вам нужно реализовать делегат контроллера разделенного представления, чтобы получить это; ты? – matt

ответ

10

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

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

    // Override point for customization after app launch. 
    self.splitViewController =[[UISplitViewController alloc]init]; 
    self.rootViewController=[[RootViewController alloc]init]; 
    self.detailViewController=[[DetailViewController alloc]init]; 

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

    // Add the split view controller's view to the window and display. 
    self.splitViewController.viewControllers=[NSArray arrayWithObjects:rootNav,detailNav,nil]; 
    self.splitViewController.delegate=detailViewController; 
    [self.window addSubview:self.splitViewController.view]; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

, где rootviewcontroller - это ур, формирующий один и подробный контроллер представления, является ур формой два.

подробный контроллер просмотра, т.е. ur form two create class variable SplitViewAppDelegate * appDelegate; // id ur app delegate variable установить свойство и синтезировать его.

затем в ур форме два

- (void)viewDidLoad { 
self.appDelegate = (SplitViewAppDelegate *)[[UIApplication sharedApplication] delegate]; 
} 

и, наконец, выдвигая уры формы три

- (IBAction)pushViewController:(id)sender{ 
    NSLog(@"%@",self.appDelegate.splitViewController.viewControllers); 
    RootLevel1 *rootLevel1 =[[RootLevel1 alloc]init];//create form 1 root vc and assign form 1 vc 
    DetailLevel1 <UISplitViewControllerDelegate>*detailLevel1=[[DetailLevel1 alloc]init]; 

    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] 
            initWithTitle: @"Home" 
            style:UIBarButtonItemStylePlain 
            target:self 
            action:@selector(home)]; 
    rootLevel1.navigationItem.leftBarButtonItem=backButton; 
    [self.appDelegate.splitViewController viewWillDisappear:YES]; 
    [[self.appDelegate.splitViewController.viewControllers objectAtIndex:0] pushViewController:rootLevel1 animated:YES]; 
    [[self.appDelegate.splitViewController.viewControllers objectAtIndex:1] pushViewController:detailLevel1 animated:YES]; 
    self.appDelegate.splitViewController.delegate = detailLevel1; 
    [self.appDelegate.splitViewController viewWillAppear:YES]; 

} 

и внезапного вид контроллер

-(void)home { 
    [self.splitViewController viewWillDisappear:YES]; 
    [[self.appDelegate.splitViewController.viewControllers objectAtIndex:0]popViewControllerAnimated:YES]; 
    [[self.appDelegate.splitViewController.viewControllers objectAtIndex:1]popViewControllerAnimated:YES]; 
    UIViewController <UISplitViewControllerDelegate>*viewController=[[self.appDelegate.splitViewController.viewControllers objectAtIndex:1] visibleViewController]; 
    self.splitViewController.delegate=viewController; 
    [self.splitViewController viewWillAppear:YES]; 

} 

установить уры SPLITVIEW delgeate соответственно.

+0

вы можете скачать код здесь http://kshitizghimire.com.np/uisplitviewcontroller-multipledetailviews-with-navigation-controller/ –

Смежные вопросы