0

我在 Xcode 4.3 中有一个标签栏应用程序,我试图在显示标签栏之前插入一个登录屏幕。presentModalViewController如果有,该应用程序可以正常工作,animated:YES但如果没有动画,则视图不会显示。

@synthesize window = _window;

@synthesize tabBarController = _tabBarController;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    UIViewController *viewController1 = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
    UIViewController *viewController2 = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];

    self.tabBarController = [[UITabBarController alloc] init];
    self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, nil];
    self.window.rootViewController = self.tabBarController;

    LogInViewController *logViewController = [[LogInViewController alloc] initWithNibName:@"LogInViewController" bundle:nil];
    [self.window addSubview:_tabBarController.view];

    [self.tabBarController presentModalViewController:logViewController animated:YES];
    //This wont work
    //[self.tabBarController presentModalViewController:logViewController animated:NO];

    [self.window makeKeyAndVisible];
    return YES;

}

-(void)loginDone{

    NSLog(@"back to the app delegate");
   [self.tabBarController dismissModalViewControllerAnimated:YES];


}
  1. 这是正确的方法吗?
  2. 为什么代码不能使用animated:NO
  3. 我也得到这个输出Unbalanced calls to begin/end appearance transitions for <UITabBarController: 0x689d350>
4

2 回答 2

1

首先,[self.window makeKeyAndVisible];在您的视图控制器设置之前移动。

此外,您应该在viewWillAppear:首先可见的视图控制器的方法中显示模态视图控制器,以确保您的应用程序视图层次结构在显示登录屏幕之前已完全初始化。

于 2012-06-05T12:36:05.577 回答
1

不要这样做:

[self.window addSubview:_tabBarController.view];

做这个:

self.window.rootViewController = _tabBarController;

这将把 放在tabBarController屏幕上。但这并不是你想要的……我的建议是:

1)首先把logViewController上面rootViewController我展示给你的东西放在上面。

2)一旦你得到你想要的(登录成功),只需告诉 AppDelegate 切换rootViewController. 这可以通过委托或通知来完成。

此外,正如 Toastor 间接指出的那样,您应该从UIViewController实际启动它的人(而不是从 AppDelegate)启动 presentViewController。

于 2012-06-05T12:38:07.900 回答