这是一个非常重要的自动旋转问题,易于重现。
我的应用程序有一个UITabBarController。每个选项卡都是UINavigationController。正常调用shouldAutorotateToInterfaceOrientation和didRotateFromInterfaceOrientation处理自动旋转。
接口正常旋转,直到我调用UIViewController.popViewControllerAnimated并更改UITabBarController.selectedIndex。
重现的步骤:
#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
#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
界面自动正常旋转,直到您点击标签#3上的按钮。
非常感谢您的帮助!
答案 0 :(得分:0)
iPhone SDK 3.2解决了这个问题。
使用以前的SDK [self.selectedViewController popViewControllerAnimated:NO]。