2012-01-12 4 views
1

UIViewControllerをマスタとして、UINavigationControllerを詳細コントローラ(実際のDetailsControllerをrootControllerとして含む)を持っています。iOS5 SplitViewControllerは、アプリケーションの起動時にランドスケープビューでBarButtonを表示したままにします。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 
    // Override point for customization after application launch. 

    KRMasterViewController *masterViewController = [[[KRMasterViewController alloc] initWithNibName:@"KRMasterViewController" bundle:nil] autorelease]; 
    UINavigationController *masterNavigationController = [[[UINavigationController alloc] initWithRootViewController:masterViewController] autorelease]; 

    KRDetailViewController *detailViewController = [[[KRDetailViewController alloc] initWithNibName:@"KRDetailViewController" bundle:nil] autorelease]; 
    UINavigationController *detailNavigationController = [[[UINavigationController alloc] initWithRootViewController:detailViewController] autorelease]; 

    self.splitViewController = [[[UISplitViewController alloc] init] autorelease]; 
    self.splitViewController.delegate = detailViewController; 
    self.splitViewController.viewControllers = [NSArray arrayWithObjects:masterNavigationController, detailNavigationController, nil]; 
    [self.window addSubview:self.splitViewController.view]; 

    LoginController *controller=[[LoginController alloc] 
             initWithNibName:@"LoginController" bundle:nil]; 
    [self.splitViewController presentModalViewController:controller animated:false]; 

    [self.window makeKeyAndVisible]; 
    return YES; 
} 

あなたのよう:アプリの起動時にiOS5をで

、私は私の窓にsplitViewControllerのビューを追加するが、その後、私は、このようsplitViewControllerの上にloginControllerを提示(ランドスケープビューでデバイスを保持) detailsControllerは私のsplitViewControllerのdelegateです。 loginControllerが表示される前に、問題は、iOS4をしている、デリゲートメソッド:私はloginControllerを閉じたときに

- (void)splitViewController:(UISplitViewController *)splitController willHideViewController:(UIViewController *)viewController withBarButtonItem:(UIBarButtonItem *)barButtonItem 
     forPopoverController:(UIPopoverController *)popoverController 

は、その後、呼び出されたデリゲートメソッド:

- (void)splitViewController:(UISplitViewController *)splitController willShowViewController:(UIViewController *)viewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem 

が呼び出されます。私は、iOSが本当に遅れているのを私は気づいていると思う。 iOS 5では、splitViewControllerに到達するまでに2番目のメソッドが呼び出されません。これは、barButtonItemが横長表示で表示されたままになっていることを意味します。面白いことに、もし私が肖像画に回転してから景観に戻ってくると、その後はメソッドが適切に呼び出されます。誰もこれまでにこれを経験した?どんな解決策ですか?

答えて

0

私は(ログイン)ナビゲーションコントローラであることから、メインメニューのsplitviewコントローラにルートコントローラを切り替えてしまった:

-(void)goToLogin{ 
    self.rootSplitController=nil; 

    UINavigationController* navController=[[UINavigationController alloc]init]; 
    navController.navigationBarHidden = true; 
    self.rootNavController=navController; 
    [navController release]; 

    LoginController *loginController=[[LoginController alloc]init]; 
    [self.rootNavController pushViewController:loginController animated:false]; 
    [loginController release]; 

    [self.window addSubview:self.rootNavController.view]; 
} 

-(void)goToMain{ 
    self.rootNavController=nil; 

    MasterController *masterViewController = [[[MasterController alloc] 
     initWithNibName:@"MasterController" bundle:nil] autorelease]; 
    UINavigationController *masterNavigationController = [[[UINavigationController alloc] 
     initWithRootViewController:masterViewController] autorelease]; 
    masterNavigationController.navigationBarHidden=true; 

    DetailsController *detailViewController = [[[DetailsController alloc] 
     initWithNibName:@"DetailsController" bundle:nil] autorelease]; 
    UINavigationController *detailNavigationController = [[[UINavigationController alloc] 
     initWithRootViewController:detailViewController] autorelease]; 
    detailNavigationController.navigationBarHidden=true; 

    self.rootSplitController = [[[UISplitViewController alloc] init] autorelease]; 
    self.rootSplitController.delegate = detailViewController; 
    self.rootSplitController.viewControllers = [NSArray arrayWithObjects: 
    masterNavigationController, detailNavigationController, nil]; 

    [self.window addSubview:self.rootSplitController.view]; 
} 
0

私は同様の問題を抱えています。アプリの起動後、私はログインmodalVCを提示します。しかし、それを却下すると、detailViewControllerのBarButtonItemは引き続き表示されます。

だけ

[self performSelector:@selector(presentLogin) withObject:nil afterDelay:0.1] 

を使用して、それは魔法のように作業を開始します。

関連する問題