带有 UITabBar 的 UITabBarController 功能

Posted

技术标签:

【中文标题】带有 UITabBar 的 UITabBarController 功能【英文标题】:UITabBarController functionality with UITabBar 【发布时间】:2012-04-17 23:01:45 【问题描述】:

我正在使用情节提要制作带有界面构建器的应用程序。

我想要一个标签栏,其中没有选择任何项目。这可以通过设置来完成

TabBar.SelectedItem = null;

但是如果你尝试这样做,你会得到以下错误:

'Directly modifying a tab bar managed by a tab bar controller is not allowed.'

所以我不能使用标准的UITabBarController。我创建了一个自定义UIViewController,并添加了一个UITabBar。在选项卡之间切换工作正常,并且没有选择也可以正常工作。

但我不知道如何使用标签栏从我的自定义视图控制器中显示我的其他视图控制器。请记住,我正在使用 interfacebuilder,因此我不能只是在代码中将视图控制器创建为新对象并将它们添加到视图中。 (如UITabBar funcionality without UITabBarController 建议的那样)

那么如何在不使用 UITabBarViewController 的情况下显示自己的视图?


编辑:仍然没有找到解决方案,但我做了一个 hacky 修复。简单地创建另一个标签栏并将其放在原始标签栏的顶部。收听这些事件并使用SelectedIndex 更改显示的视图。然后添加一些功能来选择/取消选择您自己的标签栏上的项目。

【问题讨论】:

【参考方案1】:

事实上,即使你从 IB 设计了你的其他 UIViewControllers,你也可以从代码中实例化它们。您可能需要对 frame 和 autoresizing 属性进行一些操作,以使它们适合您希望它们显示在主视图中的部分,但这是可能的。

因此,知道这一点,一个简单的解决方案是在您的主UIViewController 中创建一个简单的UIView(我们将其称为“tabFrame”),它从您的UITabBar 顶部到屏幕顶部;实例化与您的选项卡对应的UIViewController,并将其视图添加为tabFrame 的子视图。现在您只需要从标签栏中捕获项目选择即可隐藏或显示所需的子视图。

希望我说的够清楚,否则不要犹豫!

编辑:今天早上指出,在故事板上下文中,您可以有效地从代码中实例化视图控制器/场景,但为了不丢失设计器设置,它必须通过直接调用它们的构造函数,但通过StoryBoard.InstantiateViewController("vc_identifier") 调用,在情节提要编辑器中为 VC 设置标识符之后。

例如见http://docs.xamarin.com/ios/recipes/General/Storyboard/Storyboard_a_TableView

【讨论】:

是的,我想到了,但我们这里不是在谈论 IB。我正在使用故事板。 哦,是的,我一直在考虑 XIB 的 :P,我知道我可以从代码中实例化它们,但它们会丢失我在 IB 中所做的一些设置 我从来没有遇到过这个问题(从代码实例化时丢失 IB 设置),甚至不知道这种可能性,非常抱歉错误的解决方案,祝你好运! 也许我做错了,但是尝试在 IB 中创建一个分组的 UITableViewController,默认构造函数是 YourClass(IntPtr handle) : base (handle) 。您将如何使用该构造函数创建实例? 我家里没有 Mac,所以直到明天才能验证或测试,但根据我的记忆,我相信我刚刚创建了另一个不需要 IntPtr handle 的东西的构造函数。

以上是关于带有 UITabBar 的 UITabBarController 功能的主要内容,如果未能解决你的问题,请参考以下文章

带有导航的出现/消失的UITabbar

带有类似于 uitabbar 的图标/文本的 uitoolbar

iOS - 带有布局指南的 UITabBar 上方的 UIView

带有 TableView 的 UINavigationBar 和 UITabBar 内的分段控件

带有 UITableView 的 UITabBar - 我可以正确看到表格,但无法选择一行

如何在 viewController 中使用 UITabbar?