uitabbarcontroller旋转问题与PopviewControlleranimated和SelectedIndex(iPhone SDK)
题
这是一个非常重要的自动旋转问题,易于复制。
我的应用程序具有UitabbarController。每个选项卡都是Uinavigation Controller。自动旋转通过普通呼叫来处理AlysotateToToToTaceRientation和FromInterfaceorientation。
该界面正常旋转,直到我调用uiviewController.popviewControllerAnimated并更改uitabbarcontroller.selectedIndex。
重现步骤:
- 创建一个演示选项卡栏应用程序。
- 将以下代码添加到应用程序委托.H文件:
#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 - 将以下代码添加到应用程序委托.M文件:
#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上的按钮。
您的帮助将受到胜利!
解决方案
iPhone SDK 3.2解决了此问题。
使用先前的SDK使用[self.SelectedViewController popviewControllerAnimated:no]。
不隶属于 StackOverflow