1

私は今、この問題に2週間以上悩まされています! 私のプロジェクトでは、横向きと縦向きの両方を有効にしたい単一のViewController(スライド)があります。残りのすべてのコントローラー/ビュー(スライド)は、縦向きモードのみを有効にしたいです。

トリッキーな部分は、私が参照している「ViewController」が、NavigationControllers と TabBarControllers の両方に接続されていることです。横向き/縦向きの両方を有効にしたい ViewController の名前が付けられている以下のスキームを参照してください: ReferredViewController.

TabBarController ----> NavigationController ----> FristViewController --(プッシュイベント)--> ReferredViewController

これまでのところ、NavigationControllers と TabBarControllers の両方のCATEGORYを作成しようとしました。しかし、NavigationControllers と TabBarControllers はプロジェクトの最初に配置されているため、プロジェクト全体のルールが設定されます。私の ReferredViewController は、プロジェクトの「ストーリーボード」の最後または途中に配置されます。単一の ReferredViewController に対してもコードでルールを設定しようとしましたが、成功しませんでした。

私のベストショットは、FirstViewController と ReferredViewController の間のイベントを「プッシュ」から「モーダル」に変更することです。その後、ReferredViewController は縦向き/横向きの両方を回転させることができ、プロジェクトの残りの部分は縦向きにロックされます。しかし、ご存知かもしれませんが、すべてのナビゲーション (NavigationBar) が失われ、ユーザーはその 1 つのスライドで動けなくなります。

そのため、 ReferredViewController.m ファイルで次のコード例を使用して、NavigationBar を有効にしようとしています。

ShowTaskViewController *detailViewController = [[ShowTaskViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc]     initWithRootViewController:detailViewController];

navController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self.navigationController presentModalViewController:navController animated:YES  completion:nil];
[navController release];
[detailViewController release];

しかし、何も起こらないことが多く、私は再び振り出しに戻ります :O. FML!

4

2 に答える 2

1

この行で:

[self.navigationController presentModalViewController:navController 
                                             animated:YES  
                                           completion:nil];

2 つの UIViewController インスタンス メソッドを混同しています。

- (void)presentViewController:(UIViewController *)viewControllerToPresent 
                     animated:(BOOL)flag 
                   completion:(void (^)(void))completion

- (void)presentModalViewController:(UIViewController *)modalViewController 
                          animated:(BOOL)animated

これらの最初の方法は現在標準であり、2 番目の方法は ios6 で廃止されました。

また、表示するビュー コントローラーは、self の navigationController ではなく、self (ReferredViewController) である必要があります。

提示されたView Controllerは、このようにそれ自体を閉じることができます

 [[self presentingViewController] dismissViewControllerAnimated:YES 
                                                     completion:(void (^)(void))completion];

しかし、fibnochi の回答を見てください。結果を達成するためのより良い方法かもしれません。

于 2012-12-18T14:10:14.680 に答える
0

UITaBarController をオーバーライドする必要があります。これは、View Controller のベースであるためです。これをナビゲーションコントローラーで行いました。これが役に立ったかどうか教えてください。

@interface UINavigationController (Autorotation)

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation;
- (BOOL) shouldAutorotate;
- (NSUInteger) supportedInterfaceOrientations;
@end

@implementation UINavigationController (Autorotation)

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{

if ([self.visibleViewController isKindOfClass:[MWPhotoBrowser class]] || [self.visibleViewController isKindOfClass:[ZoomPictureViewController class]]) {
    return YES;
}
return  (toInterfaceOrientation == UIInterfaceOrientationPortrait);
}

-(BOOL) shouldAutorotate{
    return YES;
}

-(NSUInteger) supportedInterfaceOrientations{

    if ([self.visibleViewController isKindOfClass:[MWPhotoBrowser class]] ||     [self.visibleViewController isKindOfClass:[ZoomPictureViewController class]]) {
    return UIInterfaceOrientationMaskAll;
}

return UIInterfaceOrientationMaskPortrait;
 }
于 2012-12-18T13:43:53.970 に答える