1

我正在尝试从一个 xib 转到另一个,并且正在使用 TabBar。当我从 xib 移动到 xib 时,PresentModalViewController我失去了 TabBar。

当我使用这种方式时,它会失败(比如在android中强制关闭):

FirstViewController *fvc = [[FirstViewController alloc]initWithNibName:@"FirstViewController" bundle:nil];
    [fvc setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
    fvc.userSelectedLatitude = saveLatitude;
    fvc.userSelectedLongitude = saveLongtitude;
    UITabBarController *tabControl = [[UITabBarController alloc] initWithNibName:fvc bundle:nil];
    [self presentModalViewController:tabControl animated:NO];

当我使用:

UITabBarController *tabControl = [[UITabBarController alloc] initWithNibName:@"FirstViewController" bundle:nil];

TabBar 出现黑屏。

由于这一切都失败了,我想这不是正确的方法。那么,正确的做法是什么?

4

2 回答 2

2

上面的代码崩溃是因为你试图在initWithNibName:bundle:方法中传递一个视图控制器而不是一个 NSString 对象。

做这件事的方法取决于你真正想做的事情。您是想在 modalViewController 中显示带有或不带 tabBar 的 xib,还是简单地以模态方式显示视图控制器?

更新:

好的,您必须首先创建与每个 tabBar 按钮关联的视图控制器(就像您一直在做的那样),然后将这些视图控制器添加到您的 tabBar,然后以模态方式显示 tabBarController。像这样:

FirstViewController *fvc = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
fvc.userSelectedLatitude = saveLatitude;
fvc.userSelectedLongitude = saveLongtitude;

UITabBarController *tabControl = [[UITabBarController alloc] init];
[tabControl setViewControllers:[NSArray arrayWithObjects:fvc, nil]];
[tabControl setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
[self presentModalViewController:tabControl animated:NO];

我认为这段代码应该可以工作。所以,尝试一下,如果出现问题,请告诉我们。

于 2013-02-19T08:32:41.350 回答
1

使用 UITabBarController,无需手动呈现 viewController 或调用代码来切换视图。这是为您处理的。

您需要做的就是设置 UITabBarController 的 viewControllers 属性。像这样:

[tabBarController setViewControllers:[NSArray arrayWithObjects:view1, view2, nil]];
于 2013-02-19T07:40:26.637 回答