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 では、次のコードを使用して、マスターと 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;
}

ご覧のとおり、ビューと RootViewController を変更するために、MainAppDelegate でメソッドを呼び出しています。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。まだインターフェースさえ持っていません!

第 2 に、ルート ビュー コントローラーを持っていないようです (ペン先から取得している可能性がありますが、おそらくそれをやめるべきです。現在のアプリケーション テンプレートに示されている手法を使用してください)。

第 3 に、カスタム コンテナー ビューが作成されたので、UISplitViewController を使用する必要がまったくないことに注意してください。UISplitViewController はあまりよく構築されたクラスではないため、独自のビュー/ビュー コントローラー階層を構築できます。

于 2012-09-07T00:51:45.280 に答える