Question

Ceci est un problème de rotation automatique très important et facile à reproduire.

Mon application a une UITabBarController. Chaque onglet est un UINavigationController. La rotation automatique est gérée avec des appels normaux vers shouldAutorotateToInterfaceOrientation et didRotateFromInterfaceOrientation.

La rotation de l'interface normalement jusqu'à ce que j'appelle UIViewController.popViewControllerAnimated et le changement UITabBarController.selectedIndex.

Étapes pour reproduire:

  1. Créer une démo Tab barre d'application.
  2. Ajoutez le code suivant au fichier du délégué App:
    #import <UIKit/UIKit.h>
    @interface TestRotationAppDelegate : NSObject { UIWindow *window; UITabBarController *tabBarController; }
    @property (nonatomic, retain) IBOutlet UIWindow *window; @property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;
    @end
    // Redefine the interface to cach rotation messages @interface UITabBarController (TestRotation1AppDelegate)
    @end
  3. Ajoutez le code suivant au fichier du délégué App:
    #import "TestRotationAppDelegate.h"
    @implementation TestRotationAppDelegate @synthesize window; @synthesize tabBarController;
    -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [window addSubview:tabBarController.view]; [window makeKeyAndVisible]; return YES; }
    -(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return YES; }
    -(void)dealloc { [tabBarController release]; [window release]; [super dealloc]; }
    @end
    @implementation UITabBarController (TestRotation1AppDelegate)
    -(void)viewDidLoad { [super viewDidLoad]; // Add a third tab and push a view UIViewController *view1 = [[[UIViewController alloc] init] autorelease]; view1.title = @"Third"; UINavigationController *nav = [[[UINavigationController alloc] initWithRootViewController:view1] autorelease]; NSMutableArray *array = [[NSMutableArray alloc] init]; [array addObjectsFromArray:self.viewControllers]; [array addObject:nav]; self.viewControllers = array; // Push view2 inside the third tab UIViewController *view2 = [[[UIViewController alloc] init] autorelease]; [nav pushViewController:view2 animated:YES]; // Create a button to pop view2 UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; button.frame = CGRectMake(50, 50, 220, 38); [button setTitle:@"Pop this view" forState:UIControlStateNormal]; [button addTarget:self action:@selector(doAction) forControlEvents:UIControlEventTouchUpInside]; [view2.view addSubview:button]; }
    -(void) doAction { // ROTATION PROBLEM BEGINS HERE // Remove one line of code and the problem doesn't occur. [self.selectedViewController popViewControllerAnimated:YES]; self.selectedIndex = 0; }
    -(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return YES; }
    @end

La rotation auto d'interface normalement jusqu'à ce que vous appuyez sur le bouton sur l'onglet # 3.

Votre aide sera appréciée geatly!

Était-ce utile?

La solution

iPhone SDK 3.2 permet de résoudre ce problème.

Avec l'utilisation précédente SDK [self.selectedViewController popViewControllerAnimated: NO].

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top