• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 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

    版權聲明:本文為iCloudEnd原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/iCloudEnd/article/details/107296471

    智能推薦

    swift純代碼UITabBarController的使用

    最近在OC的基礎上開始學習swift,以下是swift純代碼搭建項目架構效果圖 創建一個項目 選擇swift語言 將項目中的main.storyboard ,ViewController ,LaunchScreen.storyboard 刪除,并將main取消為主窗口 以上操作跟OC純代碼項目架構操作一樣,接下來直接上代碼 在AppDelegate 類中創建主窗口并設置根控制器 自定義一個QCTa...

    SwiftUI macOS 如何設置工具條(教程含代碼)

    一、實戰需求 如何制作類似xcode的工具條呢 二、本文價值與收獲 看完本文后,您將能夠作出下面的界面 看完本文您將掌握的技能 掌握自定義工具條 工具條上放置Button和文本輸入框 三、基礎知識 NSHostingView AppKit視圖可以封裝SwiftUI組件 您可以使用NSHostingView對象將SwiftUI視圖集成到AppKit視圖層次結構中。托管視圖是一個管理單個SwiftUI...

    SwiftUI官方教程解讀

    原文鏈接:https://www.jianshu.com/p/ecfdbea7a0ed SwiftUI簡介 SwiftUI是wwdc2019發布的一個新的UI框架,通過聲明和修改視圖來布局UI和創建流暢的動畫效果。并且我們可以通過狀態變量來進行數據綁定實現一次性布局;Xcode 11 內建了直觀的新設計工具canvus,在整個開發過程中,預覽可視化與代碼可編輯性能同時支持并交互,讓我們可以體驗到代...

    SwiftUI 官方教程 (十)

    由于 API 變動,此文章部分內容已失效,最新完整中文教程及代碼請查看 https://github.com/WillieWangWei/SwiftUI-Tutorials 創建 watchOS App 本教程為你提供一個將你已經學到的關于 SwiftUI 的知識應用到自己的產品上的機會,并且不費吹灰之力就可以將 Landmarks app 遷移到 watchOS 上。 首先,給項目添加一個 wa...

    SwiftUI 官方教程 (一)

    由于 API 變動,此文章部分內容已失效,最新完整中文教程及代碼請查看 https://github.com/WillieWangWei/SwiftUI-Tutorials SwiftUI 簡介 SwiftUI 是一種為任何 Apple 平臺聲明用戶界面的現代化方式。以前所未有的速度,創建漂亮、動態的應用程序。 只需要描述一次的布局 為你的視圖聲明任何狀態的內容和布局,一旦狀態發生改變, Swif...

    猜你喜歡

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    精品国产乱码久久久久久蜜桃不卡