标签栏显示贯穿整个项目?

Posted

技术标签:

【中文标题】标签栏显示贯穿整个项目?【英文标题】:Tab bar display through out the project? 【发布时间】:2012-11-23 22:31:06 【问题描述】:

我在 ios Storybords 中有一个 Tab-bar 应用程序。 UITabbarcontroller 连接到-->4 组(UInavigation 控制器--> UItableview 控制器)。每个 UITableviewcontroller 单元都连接到多个要推送的 UIviewcontroller。

在构建应用程序时 - 导航选项卡出现在视图控制器的顶部,没有任何问题。但是底部有 4 个项目的 Tabbar 仅在第一个视图中可见。 UIviewcontrollers 不显示 4 项标签栏!??。我已在属性检查器中将底部栏设置为选项卡栏。但它不起作用?

我相信它肯定比我理解的要多。希望有人帮忙。

如何在整个应用程序中显示标签栏?

【问题讨论】:

【参考方案1】:

我不完全确定您的设计,但这里有一些技巧希望能有所帮助。

故事板设计:

基本的标签栏应用程序布局通常从左到右看起来像这样,左侧的第一个控制器带有小箭头,表示它是起始控制器。

您的第一个控制器应该是标签栏控制器 每个选项卡都应连接到导航控制器 每个导航控制器都应连接到一个或多个 UIViewController 或 UITableViewController。

现在,请注意虽然有高级配置,但这只是一般布局,可以很好地设置应用程序并为每个选项卡提供轻松的推送过渡。

如果您的应用启动并显示选项卡栏,并且当您选择选项卡项时,它应该显示该选项卡的视图控制器。如果标签栏仍然存在,那么到目前为止您的状态都很好。如果您在该视图控制器上选择了某些内容,并且它在屏幕上推送了一个新的视图控制器,而当这种情况发生时您丢失了标签栏,那么这很可能是问题所在: - 检查您的视图控制器并在对象检查器中查看名为“在推送时隐藏底栏”的复选标记 - 如果已选中 - 然后取消选中它。 如果在那里找不到,请检查视图控制器的代码并查看启动方法,例如 view did load 语句:self.hidesBottomBarWhenPushed = YES;如果您找到该命令,请将其注释掉或删除。

如果这是您的设计并且在您的应用程序中有意义,那么在某些视图控制器推送上隐藏标签栏是完全可以的。一般来说,为了用户体验,尽量避免它并在屏幕上保留标签栏是一种很好的做法,但有时屏幕大小等问题可能会导致开发人员在某些工作流程中隐藏它。

我希望这对您的问题有所帮助。如果没有,对不起。

【讨论】:

【参考方案2】:

你可以像这样添加标签栏:-

Appdelegate.h

#import <UIKit/UIKit.h>

@class StartingViewController;

@interface Appdelegate : NSObject <UIApplicationDelegate> 
    UIWindow *window;
    StartingViewController *viewController;

    UITabBarController *tabBarController;


@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet StartingViewController *viewController;

@property (nonatomic,retain) UITabBarController *tabBarController;

-(void)addTabBarToView;

@end

应用代理.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions     

    // Override point for customization after application launch.

    // Add the view controller's view to the window and display.
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];

    [self addTabBarToView];

    return YES;


-(void)addTabBarToView

    FirstController *first = [[FirstController alloc] initWithNibName:@"FirstController" bundle:nil];
    first.title = @"First";

    SecondController *second = [[SecondController alloc] initWithNibName:@"SecondController" bundle:nil];
    second.title = @"Second";

    ThirdController *three = [[ThirdController alloc] initWithNibName:@"ThirdController" bundle:nil];
    first.title = @"Third";

    Forthcontrooler *Four4 = [[Forthcontrooler alloc] initWithNibName:@"Forthcontrooler" bundle:nil];
    second.title = @"Secfor";





   UINavigationController *navigationController1 = [[UINavigationController alloc] initWithRootViewController:first];

   UINavigationController *navigationController2 = [[UINavigationController alloc]initWithRootViewController:second];

   UINavigationController *navigationController3 = [[UINavigationController alloc] initWithRootViewController:three];

   UINavigationController *navigationController4 = [[UINavigationController alloc]initWithRootViewController:Four4];



    tabBarController = [[UITabBarController alloc] init];        

    tabBarController.viewControllers = [NSArray arrayWithObjects:navigationController1,navigationController2,navigationController3,navigationController4,nil];

    [window addSubview:tabBarController.view];


【讨论】:

【参考方案3】:

UINavigationControllers 放在UITabbarControllers 中,而不是相反

【讨论】:

您的建议看起来很有希望,但我无法将其显示出来。你能解释更多细节吗?可能会一步一步来。非常感谢。 我已经在 UITabbarcontroller 中嵌入了四个 UINavigationController,然后将一个 UITableViewcontroller 连接到每个导航控制器。但是在 UIviewcontroller 中显示标签栏仍然没有运气(点击表格视图单元格时出现) 我不太清楚你的意思,但我看到你接受了答案,所以我想你找到了解决方案。

以上是关于标签栏显示贯穿整个项目?的主要内容,如果未能解决你的问题,请参考以下文章

导航左侧标签栏项目

iOS 自定义标签栏项目比标签栏高

如何让自定义标签栏显示标签栏项目在 Xcode 中设置的选定图像?

标签栏项目未显示在情节提要中

隐藏标签栏项目并对齐其他标签项目

切换标签栏项目时,UINavigationController 如何将其整个视图控制器表示层次结构保存在内存中?