SwiftUI UITabBarController 基础教程含代码

UITabBarController

一个容器视图控制器,管理radio-style的选择界面,其中的选择确定要显示的子视图控制器。

class UITabBarController : UIViewController

使用教程

标签栏界面在窗口底部显示标签,用于在不同模式之间进行选择并显示该模式的视图。此类通常按原样使用,但也可以子类化。

标签栏控制器界面的每个标签都与一个自定义视图控制器关联。当用户选择特定的选项卡时,选项卡栏控制器将显示相应视图控制器的根视图,以替换任何先前的视图。 (用户抽头始终显示该选项卡的根视图,而不管先前是否选择了哪个选项卡。即使已经选择了该选项卡,也是如此。)由于选择一个选项卡会替换界面的内容,因此在每个选项卡中管理的界面类型标签不必有任何相似之处。实际上,标签栏界面通常用于呈现不同类型的信息或使用完全不同的界面样式呈现相同的信息。图1显示了Clock应用程序提供的选项卡栏界面,其每个选项卡都提供了一种基于时间的信息。


UITabBarController

您永远不要直接访问标签栏控制器的标签栏视图。要配置选项卡栏控制器的选项卡,可将为每个选项卡提供根视图的视图控制器分配给viewControllers属性。指定视图控制器的顺序决定了它们在选项卡栏中的显示顺序。设置此属性时,还应该为selectedViewController属性分配一个值,以指示最初选择了哪个视图控制器。 (您也可以使用selectedIndex属性通过数组索引选择视图控制器。)将标签栏控制器的视图(使用继承的view属性获得)嵌入到应用程序窗口中时,标签栏控制器会自动选择该视图控制器并显示其内容,并根据需要调整其大小以适合标签栏界面。

标签栏项目通过其相应的视图控制器进行配置。要将标签栏项目与视图控制器相关联,请创建UITabBarItem类的新实例,为视图控制器进行适当配置,然后将其分配给视图控制器的tabBarItem属性。如果您不为视图控制器提供自定义标签栏项目,则视图控制器会创建一个默认项目,其中不包含图像和视图控制器的title属性中的文本。

当用户与标签栏界面交互时,标签栏控制器对象会将有关交互的通知发送到其委托。委托可以是您指定的任何对象,但必须符合UITabBarControllerDelegate协议。您可以使用委托来防止选择特定的选项卡栏项目,并在选择选项卡时执行其他任务。您还可以使用委托来监视“更多”导航控制器对选项卡栏所做的更改,“更多导航控制器”中对此进行了详细说明。

标签栏控制器的视图

因为UITabBarController类继承自UIViewController类,所以选项卡栏控制器具有自己的视图,可通过view属性访问该视图。 标签栏控制器的视图只是标签栏视图和包含自定义内容的视图的容器。 标签栏视图为用户提供选择控件,并由一个或多个标签栏项目组成。 图2显示了如何组装这些视图以显示整个标签栏界面。 尽管选项卡栏和工具栏视图中的项目可以更改,但管理它们的视图不能更改。 只有自定义内容视图会更改,以反映当前所选选项卡的视图控制器。

图2标签栏控制器的主要视图

签栏控制器的主要视图

您可以将导航控制器或自定义视图控制器用作选项卡的根视图控制器。如果根视图控制器是导航控制器,则选项卡栏控制器会进一步调整显示的导航内容的大小,以使其不与选项卡栏重叠。因此,在选项卡栏界面中显示的任何视图都应设置其autoresizingMask属性,以在任何情况下适当调整视图的大小。

更多导航控制器

标签栏的空间有限,无法显示您的自定义项目。如果将六个或更多的自定义视图控制器添加到选项卡栏控制器,则选项卡栏控制器仅显示前四个项目以及选项卡栏上的标准“更多”项目。轻触“更多”项目会弹出一个标准界面,用于选择其余项目。

标准“更多”项目的界面包括“编辑”按钮,该按钮允许用户重新配置选项卡栏。默认情况下,允许用户重新排列选项卡栏上的所有项目。但是,如果您不希望用户修改某些项目,则可以在customizableViewControllers属性中从数组中删除相应的视图控制器。

注意,标签栏自定义和更多界面在tvOS中不可用。

State保护

在iOS 6及更高版本中,如果您为该视图控制器的restoreIdentifier属性分配一个值,它将在所选标签中保留对视图控制器的引用。在还原时,它使用引用来选择具有相同视图控制器的选项卡。

保留选项卡栏控制器时,将唯一的还原标识符分配给要保留的子视图控制器。从子视图控制器省略恢复标识符会使该选项卡返回其默认配置。尽管选项卡栏控制器以与viewControllers属性中列出的选项卡相同的顺序保存其选项卡,但保存顺序实际上无关紧要。您的代码负责在下一个启动周期中提供新的标签栏控制器,因此您的代码可以根据需要调整标签的顺序。状态保存系统基于分配的还原标识符而不是基于标签的位置来还原每个标签的内容。

有关状态保存和还原如何工作的更多信息,请参阅《 iOS App编程指南》。

iOS和tvOS之间的差异

标签栏控制器在tvOS中的用途与在iOS中相同,但提供的用户界面功能略有不同:

在tvOS中,选项卡栏界面显示在窗口顶部。当焦点离开标签栏时,默认情况下,标签栏固定在屏幕顶部。要创建一个界面,其中选项卡栏不会保持固定,而是随内容滚动,请将tabBarObservedScrollView属性设置为适当的滚动视图。在iOS中,标签栏始终固定在屏幕底部。

在tvOS中,从选项卡栏向下滑动可将焦点移到内容视图中。具体来说,是位于选定标签下方的第一个可聚焦视图。向下滑动的行为就像正常的焦点更改手势一样,也就是说,焦点向用户滑动的方向移动。如果在所选选项卡的正下方没有可聚焦的对象,则将聚焦最近的可聚焦视图。在iOS中,标签栏始终保持焦点在屏幕底部。

在tvOS中,当标签处于焦点状态时按“选择”按钮会将焦点移到内容视图中。因为没有与此更改相关的方向,所以焦点将移动到内容视图的preferredFocusEnvironments属性中指定的最合适的视图。在iOS中,没有在视图之间聚焦的概念。

tvOS中的标签栏控制器不支持自定义。标签栏控制器仅显示其适合屏幕显示的viewControllers数组中的视图控制器数量,并且不提供在iOS中看到的More界面。


推荐

基础文章推荐

经典教程推荐

上新

技术源码推荐

推荐文章

CoreData篇

Combine篇

TextField篇

JSON文件篇


一篇文章系列

技术交流

QQ:3365059189
SwiftUI技术交流QQ群:518696470

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,076评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,658评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,732评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,493评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,591评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,598评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,601评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,348评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,797评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,114评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,278评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,953评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,585评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,202评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,180评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,139评论 2 352