我正在开发一款要求用户始终登录的应用程序。最初它有一个登录 View ,当用户登录时,它被替换为一个标签栏 View 。如果我构建到我的设备 (iOS 5.0) 或 5.0 模拟器,它工作正常。但是,如果我构建到 4.3 模拟器,我会遇到奇怪的问题。
例如:它打开的第一个选项卡最初包含登录 View - 我还没有抽出时间删除它,所以现在一旦该选项卡打开,它就会从登录 View 淡入菜单屏幕(两者都是第一个选项卡中的单独 View )。在 iOS4.3 版本中,第一个 View 不会淡出。
我将其重新编码为跳过第一个屏幕并将第一个选项卡直接打开到菜单屏幕,其中包含用户 Facebook 好友列表。我已经将 friend 列表打印到控制台并且它被正确接收 - 但是列表在 iOS4.3 中显示为空并且在 iOS 5.0 中工作正常。 在我实现单独的登录 View (afaik) 之前,这些事情都有效。我假设我没有正确实现 View 之间的更改,但我不确定哪里错了,因为我没有将任何错误打印到控制台,而且我仍然可以在选项卡等之间进行更改。
到目前为止我是这样做的(我只会包括相关部分):
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 中运行良好的事实真正让我感到震惊,我是应用程序开发的新手,所以我不知道如何以不同的方式完成它。 如果有人有任何想法,我将不胜感激。 谢谢
最佳答案
像往常一样,我花了很长时间看着它,放弃并决定寻求帮助,然后在大约半小时后实现了一种方法。
我只是在设置标签栏并将其设置为 View Controller (即将登录 View 放在顶部)之后放置它:
lvc = [[loginViewController alloc] initWithNibName:@"loginViewController" bundle:nil];
lvc.delegate = self;
[self.window addSubview:lvc.view];
然后我就用:
[lvc.view removeFromSuperview];
登录后删除它。仍然不知道为什么其他方法在 iOS 4.3 中不起作用,所以如果有人可以提供答案,我仍然会标记正确答案 - 在以防其他人将来遇到同样的问题。
关于objective-c - View 在 iOS 4.3 模拟器中显示不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10025828/