0

我不知道我想要做的事情是否可能,但因为我没有想要的结果,我猜不是。
我正在尝试并且需要做的是使用presentViewController 从以前的ViewController 调用SplitViewController。
我知道,SplitViewController 必须是 rootViewController,但我需要探索最可能的选项来实现我需要做的事情。
我有一个带按钮的 MainMenu,对于每个按钮,我都需要调用一个 SplitViewController。首先,如何做到这一点?
我要做的是:首先,在 AppDelegate 中,我调用 MainMenu,并添加为子视图和其他内容:

-(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 中,我正在使用以下代码创建具有 Master 和 DetailViewController 的 SplitViewController:

-(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 非常感谢

4

2 回答 2

0

一个更好的方法是让你UISplitViewController的根视图控制器在application:didFinishLaunchingWithOptions:. 然后MainMenu在它上面展示你的。您可以更改拆分视图控制器显示的子视图,以对应用户在您的MainMenu.

于 2012-09-07T00:42:37.897 回答
0

首先,didFinishLaunchingWithOptions:打电话还为时过早presentModalViewController。你甚至还没有一个界面!

其次,您似乎没有根视图控制器(尽管您可能从 nib 获得一个?您应该停止这样做;使用当前应用程序模板中显示的技术)。

第三,注意现在我们有了自定义的容器视图,你根本不需要使用 UISplitViewController;您可以构建自己的视图/视图控制器层次结构,这样做可能会更快乐,因为 UISplitViewController 不是一个构造良好的类。

于 2012-09-07T00:51:45.280 回答