سؤال

هذه قضية تدوير تلقائية مهمة للغاية وسهلة إعادة إنتاجها.

طلبي لديه uitabbarcontroller. كل علامة تبويب عبارة عن uinavigationController. تتم معالجة دوران التلقائي مع المكالمات العادية إلى NABSEAUTOROTATOININGORINGIRINGINAGINGINGINGING و deRotateFromInterfaceorient.

تدور الواجهة بشكل طبيعي حتى أتصل بـ UiviewController.popviewControllerAnimated وتغيير UitabbarController.SelectedEx.

خطوات للتكاثر:

  1. قم بإنشاء تطبيق شريط علامة تبويب تجريبي.
  2. أضف الكود التالي إلى ملف .H App Peping:
    #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. أضف الرمز التالي إلى ملف .M App Epelegate:
    #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: لا].

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top