iOS開發 - 在SwiftUI中顯示模態視圖

来源:https://www.cnblogs.com/GarveyCalvin/archive/2020/02/13/swiftui-modal-sheet.html
-Advertisement-
Play Games

在SwiftUI中顯示模態視圖 簡介 這裡教大家如何彈出一個簡單的模態視圖。分別有兩個頁面,ContentView和GCPresentedView,以下對應簡稱為A和B。我們要做的是在A視圖中點擊按鈕跳轉到B視圖,然後再從B視圖點擊按鈕返回到A視圖。 步驟 在A視圖中創建按鈕和模態視圖代碼 使用 對 ...


在SwiftUI中顯示模態視圖

簡介

這裡教大家如何彈出一個簡單的模態視圖。分別有兩個頁面,ContentView和GCPresentedView,以下對應簡稱為A和B。我們要做的是在A視圖中點擊按鈕跳轉到B視圖,然後再從B視圖點擊按鈕返回到A視圖。

步驟

在A視圖中創建按鈕和模態視圖代碼

struct ContentView: View {
    @State var isPresented = false
    
    var body: some View {
        Button(action: {
            self.isPresented = true
        }, label: {
            Text("Present Modally")
        })
        .sheet(isPresented: $isPresented) {
            GCPresentedView()
        }
    }
}

使用@State對屬性進行修飾,在 SwiftUI 內部會自動轉換為一對getter,setter,對這個屬性進行賦值時會觸發視圖更新。

$isPresented能夠將值引用(引用方法是在值前方加一個$符號),當引用的值發生改變時,這個改變會向外傳遞。

.sheet方法用於彈出一個模態視圖,在SwiftUI中的定義為。

public func sheet<Content>(isPresented: Binding<Bool>, onDismiss: (() -> Void)? = nil, @ViewBuilder content: @escaping () -> Content) -> some View where Content : View

在B視圖中創建按鈕和關閉模態視圖代碼

struct GCPresentedView: View {
    @Environment(\.presentationMode) var mode
    
    var body: some View {
        Button(action: {
            self.mode.wrappedValue.dismiss()
        }, label: {
            Text("Dismiss")
        })
    }
}

@Environment獲取環境變數presentationMode,我們可以通過這個變數調用wrappedValue.dismiss()可以關閉模態視圖。

直接在 Xcode 運行預覽

總結

使用 SwiftUI 框架處理界面方便很多,不用太多的定義,我們只需要將界面進行描述出來就可以了。這個教程示例中使用到了 Button 和 Text 控制項,也用到了@State, Binding, @Environment 技術點。教程很簡單,放上來大家一起學習,教程里的代碼已放在了GitHub上面,點擊這裡獲取代碼

聲明

博文作者:GarveyCalvin
博文出處:http://www.cnblogs.com/GarveyCalvin/
本文版權歸作者和博客園共有,歡迎轉載,但須保留此段聲明,並給出原文鏈接,謝謝合作!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • CRUD 在我們的項目中有日誌是一個必不可少的東西,但是日誌的檢索是一個很麻煩的事情,如每天一個日誌,要找到問題就得一個一個找,並不能做到檢索功能,這還算好的,如果是分散式的,每個機器都得找一遍,這種效率太低,當然可以把日誌收集到一個文件中,多個機器每天的日誌可以收集到一塊,如果把所有的日誌收集一塊 ...
  • sprd_battery.c 是充電驅動,這個是充電功能的核心內容,電量顯示策略、溫度檢測策略、充電保護機制等功能在這裡實現,功能實現與硬體細節剝離,調用通用介面實現邏輯控制; 1 sprdbat_probe函數: 1.1 解析設備樹: sprdbat_parse_dt函數如下: 2. 各個工作隊列 ...
  • 鳴謝:http://blog.csdn.net/leimengyuanlian/article/details/18748599 http://www.cnblogs.com/maowang1991/archive/2013/02/05/2893142.html https://www.cnblog ...
  • 編譯安裝redisd [toc] 安裝方法: yum安裝 1. 查看yum倉庫redis版本 2. yum安裝 3. 啟動服務並設為開機啟動 4. 查看redis埠 5. 測試登錄redis 6. 測試使用 編譯安裝 下載當前最新release版本redis源碼包 :http://download ...
  • Apache Flink社區宣佈Flink 1.10.0正式發佈! 本次Release版本修複1.2K個問題,對Flink作業的整體性能和穩定性做了重大改進,同時增加了對K8S,Python的支持。 這個版本標志著與Blink集成的完成,並且強化了流式SQL與Hive的集成,本文將詳細介紹新功能和主 ...
  • 1、使用 show status 瞭解各種 SQL 的執行頻率 該命令可以查詢 sql 命令的執行次數。 2、定位執行效率較低的 SQL 語句 定位執行效率較低的 SQL 一般有兩種方法: 1. 通過慢查詢日誌定位效率低的 SQL,用 該選項啟動; 2. 慢查詢日誌在查詢結束後才會記錄,所以在應用執 ...
  • 在上章14.Android-使用sendMessage線程之間通信我們學習瞭如何線上程之間發送數據. 接下來我們便來學習如何通過socket讀寫TCP. 需要註意的是socket必須寫在子線程中,不能在ui主線程中直接使用,所以我們這裡創建了兩個class: MainActivity(主界面)、Tc ...
  • 1.Handler介紹 Handler 是一個消息分發對象。handler是Android給我們提供用來更新UI的一套機制,也是一套消息處理機制,通過它可以實現在不同線程之間傳遞消息 本章Handler類要用到的方法有: void handleMessage(Message msg); //需要重寫 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...