presentModalViewController:不返回

| 我发生了一件很奇怪的事情。在我的应用程序委托中,我正在UITabBarController上调用presentModalViewController:来显示自定义类(LoadingViewController),该类实现了loadView来显示图像。当我在模拟器中针对iOS 4.x设备(iPhone或iPad)进行测试时,它在所有方向上均正常运行。但是,当我在3.2 iPad上进行测试时,如果方向是纵向,则只能正常工作。如果是风景,则不会返回presentModalViewController:方法。调用loadView和viewDidLoad方法,但不调用viewWillAppear:和viewDidAppear:方法。 有任何想法吗? 这是LoadingViewController中loadView的代码:
- (void) loadView
{
    CGRect mainScreenBounds = [UIScreen mainScreen].bounds;

    UIImageView * loadingImageView = [[UIImageView alloc] initWithFrame: mainScreenBounds];

    loadingImageView.autoresizesSubviews = YES;
    loadingImageView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

    NSString * splashImageName = [self getSplashImageName: [UIDevice currentDevice].orientation];
    loadingImageView.image = [UIImage imageNamed: splashImageName];

    UIActivityIndicatorView * spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle: UIActivityIndicatorViewStyleWhiteLarge];
    CGRect spinnerFrame = spinner.frame;

    spinnerFrame.origin.x = (mainScreenBounds.size.width - spinnerFrame.size.width) / 2;
    spinnerFrame.origin.y = mainScreenBounds.size.height * 0.7f;

    spinner.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin
                             | UIViewAutoresizingFlexibleRightMargin
                             | UIViewAutoresizingFlexibleTopMargin
                             | UIViewAutoresizingFlexibleBottomMargin;
    spinner.frame = spinnerFrame;
    spinner.hidesWhenStopped = YES;

    [spinner startAnimating];

    [loadingImageView addSubview: spinner];

    // Add a label indicating we are working so the user knows what we are doing.
    UIColor * textColor = [UIColor blueColor];

    CGRect labelFrame = loadingImageView.frame;
    labelFrame.size.height = 40;
    labelFrame.origin.y = spinnerFrame.origin.y - 100;
    UILabel * workingLabel = [[UILabel alloc] initWithFrame: labelFrame];
    workingLabel.font             = [UIFont systemFontOfSize: 18.0];
    workingLabel.textColor        = textColor;
    workingLabel.backgroundColor  = [UIColor clearColor];
    workingLabel.textAlignment    = UITextAlignmentCenter;
    workingLabel.text             = NSLocalizedString(@\"Searching for location...\", @\"Searching for location...\");
    workingLabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin
                                  | UIViewAutoresizingFlexibleRightMargin
                                  | UIViewAutoresizingFlexibleTopMargin
                                  | UIViewAutoresizingFlexibleBottomMargin
                                  | UIViewAutoresizingFlexibleWidth
                                  | UIViewAutoresizingFlexibleHeight;

    [loadingImageView addSubview: workingLabel];
    [workingLabel release];

    [spinner release];

    self.view = loadingImageView;
    [loadingImageView release];
}
    
已邀请:
UITabBarController在使用
presentModalViewController.
时应为RootViewController。IOS 3.2还存在一个问题,即在UITabBarController中将landscape2ѭ用在UITabBarController中时,如果所有视图控制器都不重写
shouldAutorotateToInterfaceOrientation
并返回yes,则将导致
presentModalViewController
挂起。     
我们最终得到的解决方案是根本不使用presentModalViewController,而是将LoadingViewController设置为根视图控制器。显然,这并不是一个完整的解决方案,但幸运的是,这对我们来说已经足够了。令人沮丧的是,不知道为什么在我们的应用程序的先前版本中,presentModalViewController现在无法正常工作。我们所做的某些事情已经破坏了它。     

要回复问题请先登录注册