alert 標題_[SwiftUI 知識碎片] Button、Image 和 Alert

5e32a0879ca19e2f3597b8b92c4edadc.png
譯自 Buttons and images
更多內容,歡迎關注公眾號:Swift花園
喜歡文章?不如來個 ?三連?關注專欄,關注我

Button 和 Image

在 SwiftUI 中,按鈕可以由兩種方式創建,取決于它們的外觀。

最簡單的方式是創建一個只包含文本的按鈕:你傳入按鈕的標題,并且提供一個閉包,這個閉包會在按鈕被點擊時執行:

Button("Tap me!") {print("Button was tapped")
}

如果你想要更多,比如一個圖像或者視圖的組合,你可以使用另外一種形式:

Button(action: {print("Button was tapped")
}) { Text("Tap me!")
}

當你需要在按鈕中配合圖像,那么上面這種方式尤其適用。

SwiftUI 有一個專門的 Image 類型,用于處于 app 中的圖片,并且有三種主要的創建方式:

  • Image("pencil") 會加載一個叫 “pencil” 的圖片,它是你已經加入工程的圖片。
  • Image(decorative: "pencil") 會加載相同的圖片,但不會在你啟用屏幕閱讀的時候被讀出來。這種方式在圖像沒有傳遞額外重要信息的時候很有用。
  • Image(systemName: "pencil") 會加載 iOS 內建的 pencil 圖標。它用的是 Apple 的 SF Symbols 圖標集,你可以從 Apple 的網站下載這個全集,在全集中瀏覽和搜索圖標。

默認情況下,如果屏幕閱讀啟用,它會讀出你的圖片名稱。因此你要確保圖片名稱清晰合理以免令用戶困惑。或者,你也可以用 Image(decorative:) 構造器來明確這個名稱不需要被讀出來。

由于按鈕的第二種形式支持包含任何類型的視圖,你可以直接用一個圖像:

Button(action: {print("Edit button was tapped")
}) { Image(systemName: "pencil")
}

當然你也可以組合圖像和文字:

Button(action: {print("Edit button was tapped")
}) {HStack(spacing: 10) { Image(systemName: "pencil")Text("Edit")}
}

提示:如果你的圖像被填充了某個顏色,比如一個純藍色。這可能是因為 SwiftUI 將它們著色以表明圖像是可點擊的。為了解決這個問題,你可以用renderingMode(.original) 修改器來強制 SwiftUI 顯示原始的圖像而不是著色后的版本。


譯自 Showing alert messages

顯示 Alert 消息

如果某件重要的事情發生,一種常見的通知用戶的方式是使用 alert – 這是一種包含標題,消息,一到兩個按鈕的彈出式窗口。

思考一下:什么時候 alert 應當被展示?如何展示?視圖是狀態的函數,alerts 也不例外。因此,與其說是“顯示 alert”,不如說我們創建 alert 并且設置展示的條件。

一個基本的 SwiftUI alert 有標題,消息,和一個 dismiss 按鈕,就像這樣:

Alert(title: Text("Hello SwiftUI!"), message: Text("This is some detail message"), dismissButton: .default(Text("OK")))

如果你需要的話,可以添加更多代碼來配置按鈕的細節。更有趣的是,我們展示 alert 的方式:我們并不會把 alert 賦給某個變量然后調用 myAlert.show()這樣的代碼,因為這樣就又回到了“事件序列”的思維方式。

取而代之的是,我們創建一個 alert 是否顯示的狀態,像這樣:

@State private var showingAlert = false

然后,我們把 alert 附著在UI的某個地方,并且告訴它使用上面那個狀態來決定是否呈現 alert。SwiftUI 會觀察 showingAlert狀態,只要它變成 true,就會展示 alert。

下面是演示代碼,當按鈕被點擊時,顯示 alert:

struct ContentView: View {@State private var showingAlert = falsevar body: some View {Button("Show Alert") {self.showingAlert = true}.alert(isPresented: $showingAlert) {Alert(title: Text("Hello SwiftUI!"), message: Text("This is some detail message"), dismissButton: .default(Text("OK")))}}
}

上面的代碼是把 alert 依附在 button 上,不過實際上alert() 修改器被應用于哪里其實無所謂,我們所做的就是當 showingAlert 為真時展示 alert。

近距離檢視一下alert() 修改器:

.alert(isPresented: $showingAlert)

這里又是一個雙向綁定,因此當你關掉 alert 彈窗時 SwiftUI 會自動showingAlert 設置回 false。


我的公眾號 這里有Swift及計算機編程的相關文章,以及優秀國外文章翻譯,歡迎關注~

441e2d9d5db03b71ff49905a571bda63.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529876.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529876.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529876.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

兩個mysql表對比_mysql實用技巧之比較兩個表是否有不同數據的方法分析

本文實例講述了mysql比較兩個表是否有不同數據的方法。分享給大家供大家參考,具體如下:在數據遷移中,我們經常需要比較兩個表,以便在一個表中標識另一個表中沒有相應記錄的記錄。例如,我們有一個新的數據庫&#xff0c…

mysql數據存儲到指定位置_Mysql數據庫表分區存儲到指定磁盤路徑

. 前提:mysql5.6.6以上的版本以上的版本才支持單表指定目錄,且目錄權限是MySQL:mysql。 在mysql中數據文件存放于在my.cnf中datadir指定的路徑,使用的表引擎不同產生的文件格式、表文件個數也會有所差異。 mysql的表引擎有多種,…

roslyn分析字符串代碼_.NET 5 源代碼生成器——MediatR——CQRS

在這篇文章中,我們將探索如何使用.NET 5中的新source generator特性,使用MediatR庫和CQRS模式自動為系統生成API。中介者模式中介模式是在應用程序中解耦模塊的一種方式。在基于web的應用程序中,它通常用于將前端與業務邏輯的解耦。在.NET平臺…

mysql跟memcache的區別_MySQL-mysql Memory Storage Engine 和memcache到底有何不同?各自的優缺點是什么?...

Memory存儲引擎將表的數據存放在內存中,默認使用哈希索引,memcache同樣是使用哈希的方式將數據存在內存中,不過它們還是有比較大的區別的,我列幾條:1.MEMORY表使用固定的記錄長度格式,像VARCHAR這樣的可變長…

vb用adodb鏈接mysql找不到_VB使用ADODB操作數據庫的常用方法

ADO常用方法下面是我所掌握的使用ADO對數據庫操作的一些常用方法,主要是提供給初學者作為參考,有不對的地方請指正。如有補充不勝榮幸準備工作DimconnAsNewADODB.Connection創建一個 Connection 實例,在這里使用New等于將Dim和Set合并為一段代…

mysql2008怎么重裝_SQL Server2005、2008如何徹底刪除卸載并重新安裝?

很多小伙伴在刪除SQL Server后重新安裝總是遇到諸多問題導致安裝失敗,這是因為你沒有將SQL Server徹底刪除卸載完畢。本文就如何徹底卸載進行詳細介紹,本文以SQL Server2008為例,2005的方法相似。方法/步驟1.按照傳統方法將SQL Server 2005、…

micropython編譯原理_C語言嵌入式Linux高級編程第9期:CPU和操作系統入門視頻課程...

嵌入式開發是一門交叉學科。它要求我們的嵌入式工程師,不僅學習C語言、匯編、軟件工程等軟件層面的知識技能,還要求對CPU內部工作機制、計算機系統架構、操作系統原理、編譯器等都有一個全局的認識和把握。而現實情況是,很多嵌入式的學員&…

mysql主從復制 火墻_MySQL高級知識(十五)——主從復制

前言:本章主要講解MySQL主從復制的操作步驟。由于環境限制,主機使用Windows環境,從機使用用Linux環境。另外MySQL的版本最好一致,筆者采用的MySQL5.7.22版本,具體安裝過程請查詢相關資料。1.主從復制的基本原理slave會…

python在人工智能領域的應用論文_Python的應用領域主要在人工智能方面。-智慧樹計算機專業導論章節答案...

計算機專業導論:Python的應用領域主要在人工智能方面。【?ж???】A:錯B:對計算機專業導論章節測試答案:對更多相關問題2020年直流電弧特性虛擬仿真實驗智慧樹章節測試答案電力電子技術(山東聯盟—中國石油大學(華東))_智慧樹_答案中國大學_《說文解字》與上古社…

正則只能出現特定字符_python正則表達式的簡單使用總結

原文作者:小哲,雷鋒網在編程中,經常會涉及到字符串的操作,一個常用的策略就是利用split函數,然后對于特定的字符串進行匹配,但是這種方法格式復雜,可復用性較差。正則表達式是處理字符串匹配一個…

MySQL配置日志服務器_mysql配置數據庫日志

mysql配置數據庫日志云服務器(Elastic Compute Service,簡稱ECS)是阿里云提供的性能卓越、穩定可靠、彈性擴展的IaaS(Infrastructure as a Service)級別云計算服務。云服務器ECS免去了您采購IT硬件的前期準備,讓您像使用水、電、天然氣等公共資源一樣便捷…

python外星人入侵不顯示子彈_【Python】python外星人入侵,武裝飛船,代碼寫好后,不顯示子彈...

按照書上寫的武裝飛船,寫到能夠左右移動了,但到了射擊(裝子彈)時候,按照書上的代碼照搬了,運行時沒顯示代碼有問題,但就是按了空格鍵,不見有子彈,其他都正常。代碼:alien_invasion.p…

python常見的異常類有哪些_Python常見異常類型

標簽:常見 nic 警告 werror pytho 無效 本地變量 計算 pointBaseException     所有異常的基類SystemExit             解釋器請求退出KeyboardInterrupt          用戶中斷執行(通常是輸入^C)Exc…

mysql dos 下切換連接_如何在dos下連接進入mysql對數據庫進行操作

一、:windowsR 進入命令命令提示符輸入 net start mysql若出現系統錯誤,要將命令提示符以管理員身份運行若出現不是內部指令,進入下面環境變量設置界面,配置path路徑1.進入系統查看界面,點擊高級系統設置2&#xff0c…

mysql二級緩存redis_SpringBoot+Mybatis+redis(二級緩存)搭建

剛剛開始接觸Spring Boot,因為極簡單的配置開發,搭建一個通用的Spring BootMybaitisredis的開發框架。一、用maven構建項目,pom.xml文件如下:org.springframework.bootspring-boot-starter-parent1.5.1.RELEASEorg.springframewor…

mysql自定義兩個條件排序_使用MySQL中的兩個不同列進行自定義排序?

為此,將ORDER BY子句與CASE語句一起使用。讓我們首先創建一個表-mysql> create table DemoTable1610-> (-> Marks int,-> Name varchar(20)-> ) ;使用插入命令在表中插入一些記錄-mysql> insert into DemoTable1610 values(85,John);mysql> in…

java獲取文件大小_Java中獲取文件大小的詳解及實例代碼

Java 獲取文件大小今天寫代碼時需要實現獲取文件大小的功能,目前有兩種實現方法,一種是使用File的length()方法;另外一種是使用FileInputStream的available()方法,當InputStream未進行read操作時,available()的大小應該…

java訪問權限friendly_Java的訪問權限

一.Java訪問權限飾詞(access specifiers)Java有public、protect、friendly、private四種訪問權限,并且這四訪問權限的訪問范圍越來越小。1. friendly1) 果一個class內的數據成員或方法沒有任何權限飾詞,那么它的缺省訪問權限就是f…

java 0 255_java – 什么(float)(par4 16255)/ 255.0F;意思?

帶alpha通道的RGB(通常稱為RGBA或aRGB)是四個字節打包成一個整數.AAAAAAAARRRRRRRRBBBBBBBBGGGGGGGG // the original par4, each char represents one bit.// where ARBG stands for alpha, red, blue and green bit.shift和運算符用于檢索每個字節.例如,par4>> 16&…

java ie下載文件名亂碼問題_php中強制下載文件的代碼(解決了IE下中文文件名亂碼問題)...

中間遇到一個問題是提交的中文文件名直接放到header里在IE下會變成亂碼,解決方法是將文件名先urlencode一下再放入header,如下。$file_name urlencode($_REQUEST[filename]);header("Pragma: public"); header("Expires: 0");heade…