2012-09-07 37 views
0

我不知道我想要做什么是可能的,但因为我没有想要的结果,我猜不是。
我在做什么,需要做的是使用presentViewController从以前的ViewController调用SplitViewController。
我知道,SplitViewController必须是rootViewController,但我需要探索最可能的选项来实现我需要做的事情。
我有一个MainMenu的按钮,并与每个按钮,我需要调用SplitViewController。首先,怎么做到这一点?
我试图做到这一点的是: 首先,在AppDelegate中我打电话的MainMenu,并添加作为一个子视图和其他的东西:我可以使用presentModalViewController显示SplitViewController吗?

-(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    [window addSubview:self.mainMenu.view]; 
    [self.mainMenu presentModalViewController:self.firstMenu animated:NO]; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

然后,在MainMenu的,我打电话SecondViewController,在模式的看法,使用此代码:

SecondViewController *secV = [[SecondViewController alloc]initWithNibName:@"SecondViewController" bundle:nil]; 
secV.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
[self presentModalViewController:secV animated:YES]; 

在这种SecondViewController,我创建SplitViewController在师父& DetailViewController的,使用此代码:

-(void)viewDidLoad{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 

    UISplitViewController *splitViewController = [[UISplitViewController alloc]init]; 

    SecondMenuViewController *secMenu = [[SecondMenuViewController alloc]init]; 
    UINavigationController *navLef = [[UINavigationController alloc]init]; 
    [navLef pushViewController:secMenu animated:NO]; 

    SecondMainViewController *secMain = [[SecondMainViewController alloc]init]; 
    UINavigationController *navRig = [[UINavigationController alloc]init]; 
    [navRig pushViewController:secMain animated:NO]; 

    splitViewController.delegate = secMain; 
    splitViewController.viewControllers = [NSArray arrayWithObjects:navLef, navRig, nil]; 

    MainAppDelegate *mainApp = [[MainAppDelegate alloc]init]; 
    [mainApp changeRootViewController:splitViewController]; 

    navRig = nil; 
    navLef = nil; 
    secMain = nil; 
    secMenu = nil; 
    splitViewController = nil; 
} 

正如你所看到的,我在MainAppDelegate中调用了一个方法来更改视图和RootViewController,因为SplitViewController必须是RootViewController。这是方法:

-(void)changeRootViewController:(UISplitViewController *)splitViewController{ 
    [self.window addSubview:splitViewController.view]; 
    self.window.rootViewController = splitViewController; 
} 

我知道,这看起来像一团糟。当我运行时,SplitViewController从不显示,所以我认为,我试图做的事情是不可能的?或者我错了什么? 如果是一切,我可以怎样在MainViewController之后显示SplitViewController?
我使用XCode4.4和iOS5的 非常感谢您

回答

0

一个更好的办法是让你的UISplitViewController根视图控制器application:didFinishLaunchingWithOptions:。然后在其上展示您的MainMenu。您可以将分屏视图控制器显示的子视图更改为与用户在MainMenu中按下的按钮相对应。

+0

谢谢...这个选项看起来很快且很有用。我已经测试过了,但现在我有两个问题。首先是:在我的MainMenu中,我需要“存储”View,因为当我需要返回时,我需要MainMenu显示最后的选项。我试图复制我的视图在另一个UIView之前删除,然后重新分配,但没有任何反应,因为不能复制UIView。第二个问题,当我旋转模拟器时,self.firstMenu不旋转。 self.firstMenu是带按钮/选项的视图 – user1600801

0

首先,didFinishLaunchingWithOptions:现在还不能叫presentModalViewController。你甚至还没有一个界面!其次,你似乎没有一个根视图控制器(虽然也许你从一个笔尖获得一个?你应该停止这样做;使用当前应用程序模板中显示的技术)。第三,请注意,现在我们拥有自定义的容器视图,您根本不需要使用UISplitViewController;你可以构建你自己的视图/视图控制器层次结构,并且你可能会更高兴,因为UISplitViewController不是一个构造良好的类。

+0

谢谢。构建我自己的ViewController层次结构,假装成一个SplitViewController,我会尝试一下,但我只是一个初学者,如果使用已经完成的东西很复杂,那我自己会做一个非常大的挑战..感谢您的建议 – user1600801

+0

有关如何在我的书中构建自己的视图控制器层次结构的更多信息:http://www.apeth.com/iOSBook/ch19.html#_container_view_controllers – matt

+0

感谢您的分享材料 – user1600801

相关问题