UITabBarController Rotation Problem mit popViewControllerAnimated und selectedIndex (iPhone SDK)
Frage
Dies ist ein sehr wichtiges automatische Drehung Problem und leicht zu reproduzieren.
hat meine Anwendung einen UITabBarController. Jede Registerkarte ist ein UINavigationController. Auto-Rotation mit normalen Anrufen zu ShouldAutorotateToInterfaceOrientation und didRotateFromInterfaceOrientation behandelt wird.
Die Schnittstelle normal dreht, bis ich UIViewController.popViewControllerAnimated und Änderung UITabBarController.selectedIndex nennen.
Schritte zum Reproduzieren:
- Erstellen Sie eine Demo-Tab Bar-Anwendung.
- Fügen Sie den folgenden Code zum AppDelegate .h-Datei:
#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 - Fügen Sie den folgenden Code zum AppDelegate .m-Datei:
#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
Die Auto-Schnittstelle normal dreht, bis Sie die Taste auf der Registerkarte # 3 tippen.
wird Ihre Hilfe geatly geschätzt!
Lösung
iPhone SDK 3.2 löst dieses Problem.
Bei früheren SDK Verwendung [self.selectedViewController popViewControllerAnimated: NO].