2012-04-05 102 views
1

我正在研究一个需要用户始终登录的应用程序。最初它有一个登录视图,当用户登录时,这被替换为一个tabbar视图。如果我构建到我的设备(iOS 5.0)或5.0模拟器,它工作正常。但是,如果我建立到4.3模拟器,我会遇到奇怪的问题。视图无法在iOS 4.3模拟器中正确显示

例如:它打开的第一个选项卡最初包含登录视图 - 我还没有轮到将其删除,因此目前一旦该选项卡打开,它将从登录视图淡出到菜单屏幕(两者都是第一个标签中的独立视图)。在iOS4.3构建这个第一视图不会淡出。

我记下它跳过第一个屏幕,并有第一个标签直接打开菜单屏幕,其中有用户的Facebook朋友列表。我已将朋友列表打印到控制台,并且它已正确接收 - 但该列表在iOS4.3中显示为空,并且在iOS 5.0中正常工作。 这些东西一直运行,直到我实现了单独的登录视图(afaik)。我假设我没有正确实现视图之间的更改,但我不确定它在哪里出错,因为我没有将任何错误输出到控制台,而且我仍然可以在选项卡之间进行更改。

This是我迄今所做的它(我只包括相关部分):

appDelegate.h 
@interface AppDelegate : UIResponder <UITabBarControllerDelegate,LoginViewControllerDelegate, otherDelegates> 

FirstViewController *viewController1; 
SecondViewController *viewController2; 
ThirdViewController *viewController3; 
FourthViewController *viewController4; 
FifthViewController *viewController5; 
loginViewController *lvc; 

@property (strong, nonatomic) UITabBarController *tabBarController; 

...

appDelegate.m 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 
lvc = [[loginViewController alloc] initWithNibName:@"loginViewController" bundle:nil]; 
lvc.delegate = self; 
[self.window addSubview:lvc.view]; 
self.window.rootViewController = lvc; 
[self.window makeKeyAndVisible]; 
} 



- (void)loginViewControllerDidFinish:(loginViewController *)loginViewController { 

//load windows and tab bar controller 
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 

viewController1 = [[[FirstViewController alloc] initWithNibName:@"FirstViewController_iPhone" bundle:nil] autorelease]; 
viewController2 = [[[SecondViewController alloc] initWithNibName:@"SecondViewController_iPhone" bundle:nil] autorelease]; 
viewController3 = [[[ThirdViewController alloc] initWithNibName:@"ThirdViewiPhone" bundle:nil] autorelease]; 
viewController4 = [[[FourthViewController alloc] initWithNibName:@"FourthViewiPhone" bundle:nil] autorelease]; 
viewController5 = [[[FifthViewController alloc] initWithNibName:@"FifthViewiPhone" bundle:nil] autorelease]; 
[viewController4 updateTabBar]; 

self.tabBarController = [[[UITabBarController alloc] init] autorelease]; 
self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, viewController3, viewController4, viewController5, nil]; 
self.window.rootViewController = self.tabBarController; 
[self.window addSubview:self.tabBarController.view]; 
[self.window makeKeyAndVisible]; 
} 


//called when logout button is pressed 
- (void)removeTabBarView 
{ 
//[self.tabBarController.view removeFromSuperview]; 
[self.window addSubview:lvc.view]; 
self.window.rootViewController = lvc; 
[self.window makeKeyAndVisible]; 
} 

编辑:这就是所谓的的appDelegate一旦所有的登录数据的有已收到。

[self loginViewControllerDidFinish:lvc]; 

它工作正常的iOS 5.0是什么是真正扔我的事实,我是很新的应用程序开发,所以我不知道如何可以这样做不同的。 如果有人有任何想法,我会非常感激。 谢谢

回答

0

像往常一样,我花了很多年看着它,放弃了,并决定寻求帮助,然后实现了一个半小时后做到这一点的方法。

我只是把这个后我安装使用TabBar并将其设置为视图控制器(即放在上面登录视图):

lvc = [[loginViewController alloc] initWithNibName:@"loginViewController" bundle:nil]; 
lvc.delegate = self; 
[self.window addSubview:lvc.view]; 

然后我就用:

[lvc.view removeFromSuperview]; 

到当我登录后删除它。仍然不知道为什么其他方式不适用于iOS 4.3,所以如果任何人都可以提供答案,我仍然会标记一个正确的答案 - 以防其他人有未来同样的问题。

相关问题