【问题标题】:PresentModalViewController not showing TabBarPresentModalViewController 不显示 TabBar
【发布时间】:2013-02-19 07:35:44
【问题描述】:

我正在尝试从一个 xib 转到另一个,并且我正在使用 TabBar。 当我使用 PresentModalViewController 从 xib 移动到 xib 时,我失去了 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 出现黑屏。

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

【问题讨论】:

    标签: objective-c uitabbarcontroller uitabbar presentmodalviewcontroller


    【解决方案1】:

    上面的代码崩溃是因为你试图在 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];
    

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

    【讨论】:

    • 我想用标签栏展示它
    • 它将我带到正确的位置,但仅显示具有正确图像的特定标签栏;标签栏上没有标题,也没有其他按钮。编辑:好的,我添加了其余的控制器,现在可以了,谢谢!
    【解决方案2】:

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

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

    [tabBarController setViewControllers:[NSArray arrayWithObjects:view1, view2, nil]];
    

    【讨论】:

    • 我的 AppDelegate 中有它:self.tabBarController = [[UITabBarController alloc] init]; self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2,viewController3, viewController4, nil]; self.window.rootViewController = self.tabBarController; [self.window makeKeyAndVisible];没听懂,抱歉。
    • 我以为你想从tab1中的viewController转到tab2中的viewController。
    • 我想从 viewController3 转到 viewController1。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多