具有标签栏和导航栏的 iPhone 应用程序

     2023-03-14     136

关键词:

【中文标题】具有标签栏和导航栏的 iPhone 应用程序【英文标题】:iPhone app with tab bar and navigation bar as peers 【发布时间】:2010-04-15 06:08:55 【问题描述】:

我正在尝试编写一个使用导航栏和标签栏的应用程序(我正在收集)这是一种不寻常的方式。

基本上,我有几个“页面”(“主页”、“设置”等),每个都有自己的标签。我还想让“主页”页面是导航栏的根视图,而其他页面是导航栏的二级视图。也就是说,我应该能够通过单击相应的标签栏项来导航到任何页面,并且应该能够通过单击导航栏的后退按钮从任何其他页面导航到主页。

目前,我有一个 UINavigationBar(通过 UINavigationController)和一个 UITabBar(通过 UITabController)作为 UIView 的子项。各个页面的视图控制器被设置为标签控制器的viewControllers属性,主页的控制器也被设置为导航控制器的根视图。每个页面视图的标记都设置为其在选项卡控件中的索引。我在标签控制器的didSelectViewController 委托方法中有以下逻辑:

- (void) tabBarController:(UITabBarController*) tabBarController
    didSelectViewController:(UIViewController*) viewController

    if ([navController.viewControllers count] > 1)
        [navController popViewControllerAnimated:NO];

    [navController pushViewController:viewController animated:YES];

另外,在导航控制器的didShowViewController 委托方法中,我有以下代码:

- (void) navigationController:(UINavigationController *) navigationController
    didShowViewController:(UIViewController *)viewController
    animated:(BOOL)animated

    tabController.selectedIndex = viewController.view.tag;

出现的问题是,当我运行此程序时,导航栏、标签栏和主页都显示正常,但标签栏不会响应输入 - 我无法选择其他标签。

我认为将标签栏作为导航控件的子级更为常见,反之亦然。这似乎不适合我的方法,因为我不想每次父控件发生更改时都必须单独创建从属控件 - 例如:每次导航栏更改时重新创建标签栏。

有人对出了什么问题以及如何解决问题有建议吗?我可能遗漏了一些明显的东西,但不管它是什么,我似乎都找不到它。谢谢!

编辑:我猜这与两个控制器都试图拥有页面控制器的所有权有关,但我终其一生都无法找到解决方法。

【问题讨论】:

【参考方案1】:

哎呀。你在这里是一筹莫展。当您尝试以非标准方式使用它们时,我已经了解到 UINavigationController 和 UITabBarController 不太适应的艰难方式。 UINavigationBar 和 UITabBar 并非设计为在视图层次结构中作为兄弟姐妹共存。他们真的很想成为远房表亲。也许您所追求的方法可以以某种方式起作用,但我个人甚至不会尝试。

话虽如此,我会建议你可以检查的一件事,然后我会告诉你我将如何解决这个问题。

你实现了吗,你是否从你的 UITabBarControllerDelegate 中的 tabBarController:shouldSelectViewController: 返回 YES?如果没有,那将阻止您的标签切换。

假设这不能解决您的所有问题,我会采取以下措施来获得您所寻求的行为:

    创建一个 UITabBarController 并将其视图设置为窗口的根视图。

    在每个选项卡下都有一个单独的 UINavigationController,每个选项卡都有自己的导航栏。 (这是同时使用 UINavigationController 和 UITabBarController 的标准方式。)

    设置一个 UITableViewController,它将主菜单表的副本显示为每个导航控制器的根视图控制器。

    在“主页”视图控制器上选择一行后,切换到相关的内容选项卡。

    在您的 UITabBarController 上设置一个委托。在其 tabBarController:didSelectViewController 方法中,调用 pushViewController:animated:。这类似于您当前正在执行的操作,只是您将在 (UINavigationController *)tabBarController.selectedViewController 上调用它。

    在内容选项卡的根视图控制器的 viewDidAppear:animated: 中,切换到“主页”选项卡。这样,当用户点击后退按钮返回“主页”时,它将切换到右侧选项卡。 (您可能还需要条件代码来防止在用户首次选择内容选项卡时发生这种情况。我不确定。)

我很想知道 Apple 是否接受这种非标准行为。回来告诉我们。另外,如果您的方法以某种方式奏效,请告诉我们。

【讨论】:

我想我可以按照你的方式做事。我想出了一个使用“裸” UINavigationBar 和 UITabBar 的潜在解决方案,但实施起来太麻烦了。我会在我有工作的时候回来报告。

在基于窗口的应用程序 iPhone 中添加标签栏和导航栏

】在基于窗口的应用程序iPhone中添加标签栏和导航栏【英文标题】:Addtabbar&navigationbarinWindowbasedapplicationiPhone【发布时间】:2011-01-1318:10:25【问题描述】:大家好我是iphone应用程序开发的新手。我想开发一个包含标签栏、导航... 查看详情

以编程方式更改标签栏和导航栏的颜色

】以编程方式更改标签栏和导航栏的颜色【英文标题】:Changethecoloroftabbarandnavigationbarprogrammatically【发布时间】:2011-12-2517:57:25【问题描述】:UITabBarController的默认颜色为黑色,UINavigationController的默认颜色为蓝色。我需要将此... 查看详情

通过标签栏和按钮导航屏幕

...】:2012-06-2218:13:44【问题描述】:我有以下问题:在我的应用程序中,有两种方法可以导航到其他屏幕:通过按钮或标签栏。所有屏幕都有调用其他屏幕的标签栏,但主屏幕是有按钮但没有标签栏的屏幕。当我开始开发我的应用... 查看详情

Swift - 使用导航栏和标签栏获取 viewController 的大小

】Swift-使用导航栏和标签栏获取viewController的大小【英文标题】:Swift-getsizeofviewControllerwithnavigationbarandtabbar【发布时间】:2017-04-0419:01:22【问题描述】:我的viewController有导航栏和标签栏。在减去导航和标签栏的大小后,我需要... 查看详情

带有状态和导航栏的 iphone 屏幕尺寸?

...1-01-1511:05:04【问题描述】:您好,有人可以通过显示状态栏和导航栏来确认iphone屏幕其余部分的确切大小。我只是想制作一个模板来工作,所以我知道我有多少空间可以玩。iphone屏幕=320x480状态栏-20px导航栏-44px所以肖像我有320x41... 查看详情

在 React 中动态更新导航栏和侧边栏的最佳方法是啥?

】在React中动态更新导航栏和侧边栏的最佳方法是啥?【英文标题】:WhatisthebestwaytodynamicallyupdateNavigationbarandsidebarinReact?在React中动态更新导航栏和侧边栏的最佳方法是什么?【发布时间】:2019-02-2122:08:19【问题描述】:我为我... 查看详情

如何创建一个带有导航栏和三个详细视图的应用程序?

】如何创建一个带有导航栏和三个详细视图的应用程序?【英文标题】:HowcanIcreateaanapplicationwithanavigationbarandthreedetailviews?【发布时间】:2011-03-1010:31:54【问题描述】:如何创建一个包含三个视图的导航栏的iPad应用程序?有没有... 查看详情

旧导航栏和标签栏控制器的视图控制器问题

】旧导航栏和标签栏控制器的视图控制器问题【英文标题】:Viewcontrollerproblemswitholdnavigationbarandtabbarcontroller【发布时间】:2017-01-2500:49:44【问题描述】:我有一个视图控制器,它在某个时间点连接到导航控制器。它仍然显示导... 查看详情

如何在 iPhone 中基于导航的应用程序中添加标签栏

】如何在iPhone中基于导航的应用程序中添加标签栏【英文标题】:howtoaddtabbarinnavigationbasedapplicationiniPhone【发布时间】:2011-07-1506:45:49【问题描述】:我创建了一个基于导航的应用程序项目。现在我想在其上放置标签栏并在该标... 查看详情

全屏 UIImage 视图

...9-0917:55:51【问题描述】:我有一个带有导航栏和标签栏的应用程序。用户可以导航到以滚动视图显示图像的视图。我希望有与iPhone照片应用程序相同的行为:顶部的导航栏,底部的工具栏,将根据点击隐藏或显示。我将视图移动... 查看详情

推送时出现大标题导航栏和搜索栏的错误

】推送时出现大标题导航栏和搜索栏的错误【英文标题】:BugwithLargeTitleNavBarandSearchBarwhenpush【发布时间】:2019-03-2110:31:01【问题描述】:我在VC1上有带有搜索栏的大型导航栏。当我从VC1显示VC2时,我遇到了ui搜索栏问题(见截图... 查看详情

在 Swift iOS 8 中设置透明导航栏和状态栏的图像底图

】在SwiftiOS8中设置透明导航栏和状态栏的图像底图【英文标题】:SetImageUnderlayofTransparentNavigationBarandStatusBarinSwiftiOS8【发布时间】:2015-07-1406:23:50【问题描述】:我是iOSswift开发的新手,我遇到了一个问题。我想设置透明导航栏... 查看详情

状态栏和导航栏的颜色不同,但实际上它们应该相同

】状态栏和导航栏的颜色不同,但实际上它们应该相同【英文标题】:Differentcoloursforstatusbarandfornavigationbarbutactuallytheyshouldbethesame【发布时间】:2018-08-2805:39:42【问题描述】:我有这个扩展,它允许我拥有一些UIView属性(例如back... 查看详情

标签栏和导航控制器应用程序中的状态恢复

】标签栏和导航控制器应用程序中的状态恢复【英文标题】:StateRestorationinTabBarandNavigationControllerApp【发布时间】:2015-09-0905:26:31【问题描述】:目标:我正在尝试恢复基于标签控制器的应用的状态(每个标签上都有导航控制器... 查看详情

隐藏标签栏和导航栏

...布时间】:2014-05-2520:53:04【问题描述】:这是我的设置:应用程序启动时主屏幕有4个按钮。每个按钮都将您带到一个新的视图/子视图。每个子视图都有一个后退按钮(通过导航控制器)带您回到主/菜单屏幕。很容易。而且效果... 查看详情

导航控制器到标签栏控制器

...2-2109:38:48【问题描述】:我正在为我的应用编写故事板。应用程序的结构是一个没有导航栏或标签栏的登录屏幕,它通向应用程序,在所有屏幕上显示导航栏和标签栏。所以导航控制器通向标签栏控制器。我在登录成功时尝试了... 查看详情

灰色污垢滑入导航栏和标签栏后面

...下。它非常快,但我已经能够当场抓住它。(我还在我的应用程序的其他地方看到了它,它带有另一个向上滑动的视图控 查看详情

在 iPhone X 上,分别控制显示/隐藏导航栏和状态栏

...】:我想分别控制显示和隐藏NavigationBar和StatusBar或我的应用程序中的每个屏幕。在iPhone6、iPhone7和iPhone8上,没问题。但在iPhoneX上,当显示N 查看详情